mysql - Sql使用计数和位置显示所有数据
问题描述
我有 2 表银行和申请人,如何查询显示所有银行并计算使用该银行的申请人数量
银行:
| 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;
但结果显示只有银行有价值,而不是所有银行
[结果][2]:
| id | Bank |Total|
|----|----------|----|
| 1 | Ambank | 2 |
| 2 | RHB BANK | 1 |
如果我删除 WHERE a.step ='W1' 或 a.step='W4
它将显示所有银行列表,但也会显示所有步骤
任何帮助将不胜感激,在此先感谢!
解决方案
您的问题是您的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
推荐阅读
- bash - 如何使用 Windows 上的 Git Bash 和脚本命令一键部署我的网站
- selenium-webdriver - 如何通过 Gradle 生成 Cucumber extent 报告 4
- regex - 什么正则表达式 (PCRE) 会找到两个不包含特定单词的特定单词?
- javascript - 遍历数组以创建新类 (JS)
- android - 使用旧视图调用 ItemDecoration 方法
- excel - 仅在之前的列中有数据的地方填写 VBA 中的公式
- python - OSMNX:如何从 Q 学习算法的坐标中获得可能的方向
- python - 如何定义与具有可变参数的函数相对应的“可调用”类型?
- java - Android:检查密钥是否在安全硬件中
- java - spring saml web 应用程序中是否可以同时存在 dp 启动的 SSO 和 sp 启动的 SSO?