一个SQL查询来计算不同条件下的记录

时间:2015-02-07 23:10:27

标签: mysql

如何在一个查询中从表participants计算记录总数,唯一用户数和状态为2的记录数?

我知道如何使用3个单独的查询来完成此操作: SELECT COUNT()FROM参与者 SELECT COUNT()FROM参与者GROUP BY用户 SELECT COUNT(*)FROM参与者WHERE status = 2

但这看起来效率不高?

participants

id         user           status 
10     john@example.com      1       
11     john@example.com      1     
12     john@example.com      1     
13    sally@mailing.com      1     
14    sally@mailing.com      2     
15   edward@halloworld.com   1     
16   edward@halloworld.com   1     
17   edward@halloworld.com   2 
18     mike@bestmail.net     2      
19     mike@bestmail.net     1 
29     nat@worldcom.com      0

2 个答案:

答案 0 :(得分:0)

由于您只需要一个结果(每个要求),您根本不需要group by子句,并且所有这些要求都可以创建为count函数的参数:

SELECT COUNT(*) AS total_records,
       COUNT(DISTINCT user) AS distinct_users_count,
       COUNT(CASE status WHEN 2 ELSE NULL END) AS status_2_count
FROM   participants

答案 1 :(得分:0)

只需使用条件聚合:

select count(*) as numrecords, count(distinct user) as numusers,
       sum(status = 2) as numstatus_2
from participants p;