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

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

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

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

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

textual
Листинг программы
  1.  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут