【问题标题】:Sql show all data using count and whereSql使用计数和位置显示所有数据
【发布时间】:2019-03-06 03:06:34
【问题描述】:

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

但结果只显示有价值的银行,而不是所有银行

[结果][2]

| id | Bank     |Total|
|----|----------|----|
|  1 | Ambank   |  2 |
| 2  | RHB BANK |  1 |

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

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

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

DEMO SQL

【问题讨论】:

    标签: mysql select count where-clause mysql-error-1064


    【解决方案1】:

    您的问题是您的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

    【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    相关资源
    最近更新 更多