如果在WHERE IN子句中找不到任何值,则返回0

时间:2019-03-09 08:10:04

标签: mysql

我有以下查询,返回用户的唯一年龄计数

SELECT name,COUNT(age) FROM visitor_interview WHERE age IN (27,26,23) group by age

此查询返回以下信息(唯一的年龄及其计数)

array(2) { ["age"]=> int(26) ["count(age)"]=> int(3) } 
array(2) { ["age"]=> int(27) ["count(age)"]=> int(2) } 

我没有任何年龄23岁的用户,因此它不返回任何值

有没有办法让我23岁的count = 0?就像下面的

array(2) { ["age"]=> int(26) ["count(age)"]=> int(3) } 
array(2) { ["age"]=> int(27) ["count(age)"]=> int(2) }
array(2) { ["age"]=> int(23) ["count(age)"]=> int(0) }

1 个答案:

答案 0 :(得分:1)

您可以通过创建一个具有您感兴趣的年龄的派生表来使用UNION并将其LEFT JOIN放入您的visitor_interview表中:

SELECT a.age, COUNT(v.age) 
FROM (SELECT 23 AS age UNION SELECT 26 UNION SELECT 27) a
LEFT JOIN visitor_interview v ON v.age = a.age
GROUP BY a.age
ORDER BY a.age

Demo on dbfiddle