Группировать по количеству () - PullRequest
1 голос
/ 07 января 2012

Я пытаюсь заставить работать следующий запрос:

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 (), поэтому запрос прерывается.Как я могу сделать эту работу?

Ответы [ 3 ]

2 голосов
/ 07 января 2012

Попробуйте это:

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`

Внутренний запрос возвращает месяц, количество пользователей и смен.Во внешнем запросе вы можете группировать по сменам.

1 голос
/ 07 января 2012

Используйте подзапрос, чтобы получить счетчик для некоторого идефикатора (например, идентификатор столбца), затем присоедините его к исходному запросу

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 голосов
/ 07 января 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...