Объединение трёх запросов в один - MySQL
Формулировка задачи:
У меня есть 3 запроса и в них код очень похож, Можно ли сделать из них 1 запрос?
1) Показывает сколько статей в каждой категории
2) Показывает, сколько вопросов опубликовано в каждом разделе. Если статус = 1, значит опубликовано
3) Показывает, сколько вопросов без ответов, в каждом разделе
SELECT category.name, COUNT(question.name) FROM category LEFT JOIN question ON category.id = question.cat_id GROUP BY category.name
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
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)
Объяснение кода листинга программы
- Запрос объявляет функцию агрегации SUM.
- Внутри функции агрегации указывается условие WHEN, которое проверяет, равно ли значение столбца question.status единице.
- Если условие WHEN выполняется, то возвращается значение 1.
- Если условие WHEN не выполняется, то возвращается значение 0.
- Итоговое значение функции агрегации SUM будет равно сумме всех возвращаемых значений.
- Значение функции агрегации SUM будет содержать только одно поле с именем
sum_of_case
. - Имя поля
sum_of_case
выделяется в кавычки. - Значение поля
sum_of_case
будет представлять собой сумму всех значений, возвращаемых функцией агрегации CASE.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д