簡體   English   中英

SQL - 帶有子查詢的 SELECT 語句

[英]SQL - SELECT statement with sub queries

讓我們以下表為例

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之后),因為您在代碼中使用了它。

演示
結果:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM