SQL - SELECT 带有子查询的语句
SQL - SELECT statement with sub queries
下面以table为例
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;
您可以使用条件聚合来完成:
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
试试下面的脚本-
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;
下面以table为例
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;
您可以使用条件聚合来完成:
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
试试下面的脚本-
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;