SQL两表计数

时间:2018-09-03 13:32:32

标签: mysql left-join mysql-workbench

我有两个SQL表,一个称为X,一个称为Y。表X有两列,街道名称和门牌号码。表Y也有两列,街道名称和门牌号。

我正在尝试创建一个查询,该查询可以让我计算出某个街道名称出现的次数,通常这很容易。

但这是窍门,根据一些研究,如果在列中没有给定字符串的实例的情况下使用count(),则它应该返回0,但不是。 任何有关如何使count()在sql中返回0的帮助将不胜感激。当前,当我运行查询时,即使表中没有实例,它也会返回1。

当前查询:

SELECT b.wing,count(b.wing),count(a.wing)
FROM  residents as a, rooms as b
WHERE b.wing = ( "Wing" OR  "East" OR "Split")
GROUP BY b.wing

结果

East      2     1
Split     1     1
West      1     1

预期结果

East      2     0
Split     1     0
West      1     1

具有当前建议解决方案的当前结果

East      1     1
Split     1     1
West      1     1

问题:拆分列和East 2nd列应返回0(表中没有它们的实例)

样本数据:

 residents
 name      wing    roomnum 
'justin', 'West', '400',     ( in this table there is only one entry)

 rooms
 wing    roomnum
 'East', '410', 
 'Split', '400', 
'West', '400', 
 'East', '400', 

1 个答案:

答案 0 :(得分:2)

如果您使用JOIN子句而不是2个表的叉积,它将返回0。如果您的表residents通过任一列与另一个表相关,请使用LEFT JOIN子句,以便返回NULL的值以获得0的结果。

一个例子类似于:

SELECT b.wing,count(b.wing),count(a.wing)
FROM rooms as b
LEFT JOIN residents as a
    ON a.roomnum = b.roomnum
        AND a.wing = b.wing
WHERE b.wing IN ( "Wing", "East", "Split")
GROUP BY b.wing