让我们以下表为例
ID Name Status
1 Jon pass
2 Jon fail
3 Jon fail
4 Snow pass
5 Snow fail
6 Snow fail
我需要编写一个查询,以以下格式显示结果
Name Total Pass Fail
Jon 3 1 2
Snow 3 1 2
我正在尝试在select中将以下查询与子查询一起使用,但我知道它不正确。请告知。
SELECT
Name,
count(ID) as Total,
(SELECT count(ID) FROM results WHERE status = 'pass') as Pass
(SELECT count(ID) FROM results WHERE status = 'fail') as Fail
FROM results
HAVING count(ID)>2
GROUP BY Name
ORDER BY count(ID) desc;
答案 0 :(得分:2)
您可以通过条件聚合来做到这一点:
SELECT
Name,
COUNT(ID) as Total,
COUNT(CASE WHEN status = 'pass' THEN 1 END) Pass,
COUNT(CASE WHEN status = 'fail' THEN 1 END) Fail
FROM results
GROUP BY Name
HAVING COUNT(ID) > 2
ORDER BY COUNT(ID) desc;
我保留了HAVING
子句(必须放在GROUP BY
之后),因为您在代码中使用了它。
请参见demo。
结果:
> NAME | TOTAL | PASS | FAIL
> :--- | ----: | ---: | ---:
> Jon | 3 | 1 | 2
> Snow | 3 | 1 | 2
答案 1 :(得分:1)
在以下脚本中尝试此操作-
SELECT
Name,
count(ID) as Total,
SUM(CASE WHEN status = 'pass' THEN 1 ELSE 0 END) as Pass,
SUM(CASE WHEN status = 'fail' THEN 1 ELSE 0 END) as fail
FROM results
GROUP BY Name
HAVING count(ID)>2
ORDER BY count(ID) desc;