gpt4 book ai didi

mysql - Sql使用计数和位置显示所有数据

转载 作者:行者123 更新时间:2023-11-29 16:55:33 24 4
gpt4 key购买 nike

我有 2 表银行和申请人,如何查询显示所有银行并计算使用该银行的申请人数量

Bank :

| id | Bank_desc    
|----|---------
| 1 | Ambank
| 2 | Maybank
| 3 | RHB BANK
| 4 | OSBC

[申请人][2] :
| id | Name | Bank|STEP|
|----|------|----|----|
| 1 | JACK | 3 | W1 |
| 2 | ANDY | 1 | W4 |
| 3 | VOID | 1 | W1 |
| 4 | RAY | 1 | W5 |

我想显示所有银行列表以及申请人总数,但仅限于步骤 W1 或 W4 中的申请人,
[结果][2] :
| id | Bank     |Total|
|----|----------|----|
| 1 | Ambank | 2 |
| 2 | Maybank | 0 |
| 3 | RHB BANK | 1 |
| 4 | OSBC | 0 |

我试过这个 sql
 SELECT
b.id,
b.Bank, COUNT(a.Bank) AS Total FROM Bank b LEFT JOIN Applicant a ON b.id = a.Bank WHERE a.step ='W1' or a.step='W4 GROUP BY b.id, b.Bank;

但结果显示只有银行有值(value),而不是所有银行

[结果][2] :
| id | Bank     |Total|
|----|----------|----|
| 1 | Ambank | 2 |
| 2 | RHB BANK | 1 |

如果我删除 WHERE a.step ='W1' 或 a.step='W4

它将显示所有银行列表,但也会显示所有步骤

任何帮助将不胜感激,在此先感谢!

DEMO SQL

最佳答案

你的问题是你的 WHERE条款不包括在这两个步骤中没有客户的任何银行。您需要更改查询以改用条件聚合:

WITH Bank AS (
SELECT 1 AS id, 'Ambank' AS Bank UNION ALL
SELECT 2, 'Maybank' UNION ALL
SELECT 3, 'RHB BANK' UNION ALL
SELECT 4, 'OSBC'
),
Applicant AS (
SELECT 1 AS id, 'JACK' AS Name, 3 AS Bank, 'W1' AS Step UNION ALL
SELECT 2, 'ANDY', 1,'W1' UNION ALL
SELECT 3, 'ROY', 1,'W4' UNION ALL
SELECT 4, 'VOID', 1,'W5'
)

SELECT
b.id,
b.Bank,
SUM(CASE WHEN a.step = 'W1' OR a.step = 'W4' THEN 1 ELSE 0 END) AS Total
FROM Bank b
LEFT JOIN Applicant a
ON b.id = a.Bank
GROUP BY
b.id,
b.Bank
ORDER BY
b.id;

输出:
id  Bank        Total
1 Ambank 2
2 Maybank 0
3 RHB BANK 1
4 OSBC 0

Updated DBFiddle

关于mysql - Sql使用计数和位置显示所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52583762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com