SQL-带有子查询的SELECT语句

时间:2020-06-20 09:48:19

标签: sql subquery oracle10g

让我们以下表为例

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;

2 个答案:

答案 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;