2012-01-07 5 views
1

で、私は次のクエリを動作させるためにしようとしている:グループカウント()

SELECT 
    DATE_FORMAT(date, '%Y %m') AS `Month`, 
    COUNT(schedule_id) AS `Shifts`, 
    COUNT(user_id) AS `Users` 
FROM 
    schedule 
GROUP BY 
    `Month`, `Shifts` 

それは多くのユーザーが毎月、シフトの一定量をどのように動作するかを知らせる頻度表を与える必要があります(たとえば、12月に20人のシフトを作業する10人のユーザー、15人のシフトを作業する12人のユーザーなど)。

MySQLはCOUNT()にグループ化できません。そのため、クエリは中断されます。どうすればこの作品を作れますか?これを試してみてください元のクエリでそれに参加

SELECT ... FROM schedule sh JOIN (SELECT id, COUNT(schedule_id) AS Shifts FROM schedule) AS cnt ON cnt.id = sh.id GROUP BY ..., cnt.Shifts 

答えて

2

、その後、いくつかのidetifier(例では、列ID)当たりのカウントを取得するための

+0

Thanx!きちんとしたトリック。 – Lennart

1

使用サブクエリ:

SELECT 
    `Month`, `Shifts`, COUNT(`User`) `Users` 
FROM ( 
    SELECT -- select nr of shifts per user 
     DATE_FORMAT(date, '%Y %m') AS `Month`, 
     user_id AS `User`, 
     COUNT(schedule_id) AS `Shifts` 
    FROM 
     schedule 
    GROUP BY 
     `Month`, `User` 
) s 
GROUP BY `Month`, `Shifts` 

インナー問い合わせは、月、ユーザとシフトを返します。カウント。外側のクエリでは、シフトでグループ化できます。

0
SELECT 
    y 
    , m 
    , Shifts 
    , COUNT(*) AS Users 
FROM 
    (SELECT 
     YEAR(date) AS y 
     , MONTH(date) AS m 
     , user_id 
     , COUNT(*) AS Shifts 
    FROM 
     schedule 
    GROUP BY 
     YEAR(date), MONTH(date), user_id 
) AS grp 
GROUP BY 
    y 
    , m 
    , Shifts