2011-04-01 42 views
2

我的一位同事正在研究SQL查询。经过多次连接(工人帐户任务),她得到了一些信息排序是这样的:如何使用多个COUNT为不同的GROUP BY编写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更改为“已处理”等,并将所有这些加在一起,从每一个中选择计数。

有没有更明显的方法来做到这一点?

+0

有问题!为什么在你的例子中说在Processed_count = 1? – Longha 2011-04-01 16:15:33

回答

5
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 
+0

啊!有条件的“SUM” - 这就是我所缺少的。 *更简单。我想我只用于数字字段。谢谢! – 2011-04-01 16:12:31

+0

@Nathan:在'MySQL'中,'BOOLEAN'只是'TINYINT'的别名。 – Quassnoi 2011-04-01 16:14:10