如何在一个查询中从表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
答案 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;