【问题标题】:SQL query COUNT return zero with multiple tables JOINSQL 查询 COUNT 与多个表 JOIN 返回零
【发布时间】:2013-09-21 19:56:43
【问题描述】:

这是场景: 有4张桌子 - CF {ID, NAME} - 类{ID,CLASSCODE,CF_ID} - 所有者 {ID, AREACODE, CF_ID} - 区域 {ID、区域代码、区域代码}

CF_ID 是指向 CF.ID 的外键

我想查询数据库以获得 3 列: - 地区代码 - 班级代码 - FREQUENCY(CF.ID的出现次数)、GROUP BY REGIONCODE和CLASSCODE

棘手的部分是查询返回的数据集应该包括频率为 0 的行,以防在特定 REGIONCODE 中找不到特定 CLASSCODE 的出现。 基本上我想让每个 CLASSCODE (DISTINCT) 的 REGIONCODE (DISTINCT) 的 carthesian 乘积枚举所有事件,即使 FREQUENCY 为零。

这是我写的查询:

SELECT 
REGION.REGIONCODE, CLASS.CLASSCODE, COUNT(CF.ID) AS Frequency 
FROM REGION 
JOIN OWNER ON REGION.AREACODE = OWNER.AREACODE
JOIN CF ON OWNER.CF_ID = CF.ID 
JOIN CLASS ON CLASS.CF_ID = CF.ID
GROUP BY CLASS.CLASSCODE, REGION.REGIONCODE
ORDER BY REGION.REGIONCODE, CLASS.CLASSCODE

【问题讨论】:

    标签: sql select join count


    【解决方案1】:

    使用交叉连接获取笛卡尔积,然后使用左外连接确保不会丢失任何东西。

    Select
        r.RegionCode,
        c.ClassCode,
        Count(cf.Id) AS Frequency 
    From
        Region r
            Cross Join
        Class c
            Left Outer Join
        Owner o
            On r.AreaCode = o.AreaCode
            Left Outer Join
        CF
            On o.Cf_Id = cf.Id And
               c.Cf_Id = cf.Id
    Group By
        c.ClassCode,
        r.RegionCode
    Order By
        r.RegionCode,
        c.ClassCode
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多