2012-01-07 71 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` 

它應該給一個頻率表,說明有多少用戶在十二月工作一定量的變化的,每月(例如,有10名用戶在工作20班,12名用戶在工作15班等)。

儘管MySQL無法在COUNT()上進行分組,但查詢會中斷。我該如何做這項工作?

回答

2

加入它試試這個:

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

Thanx!整潔的把戲。 – Lennart 2012-01-07 12:04:05

1

使用子查詢,讓每一些idetifier(例如,在列ID)計數,然後用原來的查詢

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 
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