ONE SQL查询来计算不同条件下的记录
问题描述:
如何在一个查询中统计表participants
中的记录总数,用户唯一数和状态为2的记录数?ONE SQL查询来计算不同条件下的记录
我知道如何使用3个单独的查询来实现: SELECT COUNT()参与者 SELECT COUNT()参与者GROUP BY用户 SELECT COUNT(*)FROM参加WHERE状态= 2
但是这看起来效率不高?
表participants
id user status
10 [email protected] 1
11 [email protected] 1
12 [email protected] 1
13 [email protected] 1
14 [email protected] 2
15 [email protected] 1
16 [email protected] 1
17 [email protected] 2
18 [email protected] 2
19 [email protected] 1
29 [email protected] 0
答
只需使用条件汇总:
select count(*) as numrecords, count(distinct user) as numusers,
sum(status = 2) as numstatus_2
from participants p;
答
既然你只想要一个结果(按规定),你不需要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