【问题标题】:Count missing values on SQL join计算 SQL 连接上的缺失值
【发布时间】:2020-04-09 12:44:38
【问题描述】:

您能否建议一个正确的查询来计算包括没有数据的类别?

表1

|ID | NAME
+---+------
| 1 | AAA
| 2 | BBB
| 3 | CCC
| 4 | DDD 

表2

GroupName | GUID | ID
----------+------+-----
 GroupA   | zxcv |  1
 GroupA   | zxdt |  1
 GroupA   | fhgg |  2
 GroupA   | fhjg |  2
 GroupA   | fqwe |  2
 GroupB   | ffgh |  3
 GroupB   | yjkl |  3
 GroupB   | poiu |  2
 GroupB   | mnju |  2
 GroupB   | gytd |  2

我正在努力

SELECT 
    B.GroupName,
    A.NAME,
    COUNT(DISTINCT B.GUID) Quantity
FROM
    Table2 B
LEFT JOIN 
    Table1 A ON B.ID = A.ID
GROUP BY 
    B.GroupName, A.NAME

结果我得到了

GroupA | AAA | 2
GroupA | BBB | 3
GroupB | CCC | 2
GroupB | BBB | 3

但我想看看

GroupA | AAA | 2
GroupA | BBB | 3
GroupA | CCC | 0
GroupA | DDD | 0
GroupB | AAA | 0
GroupB | BBB | 3
GroupB | CCC | 2
GroupB | DDD | 0

任何帮助表示赞赏...

【问题讨论】:

    标签: sql-server join group-by count


    【解决方案1】:

    您必须将 Table1 与 Table2 的所有不同组名交叉连接,然后将连接左连接到 Table2 进行聚合:

    select d2.groupname, t1.name, count(t2.id) counter
    from table1 t1 cross join (select distinct groupname from table2) d2
    left join table2 t2
    on t2.groupname = d2.groupname and t2.id = t1.id
    group by d2.groupname, t1.name
    order by d2.groupname, t1.name
    

    请参阅demo
    结果

    > groupname | name | counter
    > :-------- | :--- | ---------------:
    > GroupA    | AAA  |                2
    > GroupA    | BBB  |                3
    > GroupA    | CCC  |                0
    > GroupA    | DDD  |                0
    > GroupB    | AAA  |                0
    > GroupB    | BBB  |                3
    > GroupB    | CCC  |                2
    > GroupB    | DDD  |                0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      相关资源
      最近更新 更多