我有两个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',
答案 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