Как я могу написать SQL-запрос с несколькими COUNT для разных GROUP BY? - PullRequest
2 голосов
/ 01 апреля 2011

Один из моих коллег работает над SQL-запросом. После нескольких присоединений (рабочих к учетным записям) у нее появляется такая информация:

Worker       Account    Date        Task_completed
Bob Smith    12345      01/01/2010  Received
Bob Smith    12345      01/01/2010  Received
Bob Smith    12345      01/01/2010  Processed
Sue Jones    23456      01/01/2010  Received
...

В конечном итоге она хочет что-то вроде этого - для каждой даты, для каждой учетной записи, сколько задач выполнил каждый работник для этой учетной записи?

Worker       Account    Date        Received_count  Processed_count
Bob Smith    12345      01/01/2010  2               1

... и есть еще несколько статусов для подсчета.

Получить один из этих подсчетов довольно просто:

SELECT
  COUNT(Task_completed)
FROM 
  (the subselect)
WHERE 
  Task_completed = 'Received'
GROUP BY
  worker, account, date

Но я не уверен, что лучший способ получить их всех. По сути, мы хотим, чтобы несколько COUNT s использовали разные GROUP BY s . Лучшее, что я могу выяснить, - это скопировать и вставить подзапрос несколько раз, изменить WHERE на «Обработано» и т. Д. И объединить все эти элементы вместе, выбирая только количество из каждого.

Есть ли более очевидный способ сделать это?

1 Ответ

5 голосов
/ 01 апреля 2011
SELECT  worker, account, date,
        SUM(task_completed = 'Received') AS received_count,
        SUM(task_completed = 'Processed') AS processed_count
FROM    mytable
GROUP BY
        worker, account, date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...