Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在计数()时返回0_Mysql - Fatal编程技术网

Mysql 在计数()时返回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

我见过类似的问题,但很多问题都是不同的情况,我就是不能让它像我想要的那样工作,所以我来这里寻求帮助

用户在一定时期内居住过多个城市

我如何让count将0返回到他们所属的所有其他城市,但这些城市不在日期之间的

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

哦,为什么又在那里打招呼:)我还以为你上床睡觉了呢而且,你一直在使用我以前没听说过的关键词!我醒来;)从稀薄的空气中拔出一个新的总是很好的——只要确保它不是一个打字错误:再一次,我花了一点时间把它弄好。列名并不完全相同,但最终都解决了。非常感谢:)这两张表的表结构是什么?每个列在哪个表中?您的数据是什么样子的?