возвращает 0, если не найдено значение для любого значения в предложении WHERE IN

#mysql

#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 лет, поэтому он не возвращает никакого значения для этого

Есть ли способ, которым я могу получить count = 0 для возраста 23. Как показано ниже

 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:

Вы можете сделать это, создав производную таблицу с возрастами, которые вас интересуют в использовании, 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
  

Демонстрация на dbfiddle