Mysql 在计数()时返回0
我见过类似的问题,但很多问题都是不同的情况,我就是不能让它像我想要的那样工作,所以我来这里寻求帮助 用户在一定时期内居住过多个城市 我如何让count将0返回到他们所属的所有其他城市,但这些城市不在日期之间的Mysql 在计数()时返回0,mysql,Mysql,我见过类似的问题,但很多问题都是不同的情况,我就是不能让它像我想要的那样工作,所以我来这里寻求帮助 用户在一定时期内居住过多个城市 我如何让count将0返回到他们所属的所有其他城市,但这些城市不在日期之间的 SELECT cityname, COUNT( cityname ) AS city_count FROM cities LEFT OUTER JOIN people ON cities.id = people.cityid WHERE firstname = 'John' AND
SELECT cityname, COUNT( cityname ) AS city_count
FROM cities
LEFT OUTER JOIN people ON cities.id = people.cityid
WHERE firstname = 'John' AND lastname = 'Doe'
AND RESIDENCY_DATE
BETWEEN '1996-08-01'
AND '1997-05-31'
GROUP BY cityname
查询输出:
city | city_count
___________________
cali 1
seattle 2
预期产出:
city | city_count
___________________
cali 1
seattle 2
washington 0
new york 0
等等
我希望它计算日期之间的任何值,但将0返回给他们居住过的所有其他城市
(这将显示people.cityid
列中的所有行)以下内容应该可以使用。同时,他还自由地清理了中间逻辑,以确保它与1997-05-31(包括1997-05-31)相匹配
这将选择所有城市,然后统计符合特定标准的人数
SELECT
cities.cityname,
COALESCE(COUNT( inTimePeriod.id ),0) AS city_count
FROM cities
// Find all cities the user has lived in
INNER JOIN people AS hasLivedIn
ON hasLivedIn.cityid = cities.id
AND people.firstname = 'John'
AND people.lastname = 'Doe'
// Now rejoin the ones that they've lived in in the specified time
LEFT JOIN people AS inTimePeriod
ON inTimePeriod.cityid = hasLivedIn.cityid
AND inTimePeriod.RESIDENCY_DATE BETWEEN DATE('1996-08-01') AND DATE('1997-05-31')
GROUP BY cities.cityname
如果没有匹配的行,则使用它返回0
请尝试以下内容:
SELECT cityname, COUNT( distinct cityname ) AS city_count
FROM cities
LEFT OUTER JOIN people ON cities.id = people.cityid
WHERE firstname = 'John' AND lastname = 'Doe'
AND RESIDENCY_DATE
BETWEEN '1996-08-01'
AND '1997-05-31'
GROUP BY cityname
哦,为什么又在那里打招呼:)我还以为你上床睡觉了呢而且,你一直在使用我以前没听说过的关键词!我醒来;)从稀薄的空气中拔出一个新的总是很好的——只要确保它不是一个打字错误:再一次,我花了一点时间把它弄好。列名并不完全相同,但最终都解决了。非常感谢:)这两张表的表结构是什么?每个列在哪个表中?您的数据是什么样子的?