Объединение трёх запросов в один - MySQL

Узнай цену своей работы

Формулировка задачи:

У меня есть 3 запроса и в них код очень похож, Можно ли сделать из них 1 запрос? 1) Показывает сколько статей в каждой категории
SELECT category.name, COUNT(question.name) FROM category LEFT JOIN question ON category.id = question.cat_id GROUP BY 
 
category.name
2) Показывает, сколько вопросов опубликовано в каждом разделе. Если статус = 1, значит опубликовано
SELECT category.name, COUNT(question.status) FROM category LEFT JOIN question ON category.id = question.cat_id  AND 
 
question.status = 1 GROUP BY category.name
3) Показывает, сколько вопросов без ответов, в каждом разделе
SELECT category.name, COUNT(question.answer) FROM category LEFT JOIN question ON category.id = question.cat_id  AND 
question.answer = "" GROUP BY category.name

Решение задачи: «Объединение трёх запросов в один»

textual
Листинг программы
 SUM(CASE question.status WHEN 1 THEN 1 ELSE 0 END)

Объяснение кода листинга программы

  1. Запрос объявляет функцию агрегации SUM.
  2. Внутри функции агрегации указывается условие WHEN, которое проверяет, равно ли значение столбца question.status единице.
  3. Если условие WHEN выполняется, то возвращается значение 1.
  4. Если условие WHEN не выполняется, то возвращается значение 0.
  5. Итоговое значение функции агрегации SUM будет равно сумме всех возвращаемых значений.
  6. Значение функции агрегации SUM будет содержать только одно поле с именем sum_of_case.
  7. Имя поля sum_of_case выделяется в кавычки.
  8. Значение поля sum_of_case будет представлять собой сумму всех значений, возвращаемых функцией агрегации CASE.

Оцени полезность:

7   голосов , оценка 4.143 из 5