Запрос и JOIN - MySQL

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

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

Добрый день. Я написал 2 запроса. Скажите, пожалуйста, как правильнее? 1 или 2? 1.
SELECT qurum_id, COUNT(*) AS I FROM `qurum` AS qur
JOIN (SELECT id, qurum1,input_date FROM DATA ) `aa` ON qur.qurum_id = aa.qurum1
WHERE DATE_FORMAT(aa.input_date, '%Y') = 2017 AND DATE_FORMAT(aa.input_date, '%m') < 06
GROUP BY `qurum_id`
ORDER BY qur.qurum_id
2.
SELECT qurum_id, COUNT(*) FROM `qurum` AS qur
JOIN (SELECT id, qurum1 FROM DATA WHERE DATE_FORMAT(input_date, '%Y') = 2017 AND DATE_FORMAT(input_date, '%m') < 06) `aa` ON qur.qurum_id = aa.qurum1
 
GROUP BY `qurum_id`
ORDER BY qur.qurum_id
и 2-ой вопрос. Этот запрос разделен на 2 части (1-ое полугодие и 2-ое). Как пристыковать 2-ую часть? Так выдает ошибку #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'RIGHT JOIN( SELECT qurum_id, COUNT(*) AS II FROM `qurum` AS qur2 JOIN (SELECT i' at line 5
SELECT qurum_id, COUNT(*) AS I FROM `qurum` AS qur
JOIN (SELECT id, qurum1,input_date FROM DATA ) `aa` ON qur.qurum_id = aa.qurum1
WHERE DATE_FORMAT(aa.input_date, '%Y') = 2017 AND DATE_FORMAT(aa.input_date, '%m') < 06
 
RIGHT JOIN(
SELECT qurum_id, COUNT(*) AS II FROM `qurum` AS qur2
JOIN (SELECT id, qurum1,input_date FROM DATA ) `bb` ON qur2.qurum_id = bb.qurum1
WHERE DATE_FORMAT(bb.input_date, '%Y') = 2017 AND DATE_FORMAT(bb.input_date, '%m') BETWEEN 06 AND 12
)
 
GROUP BY `qurum_id`
ORDER BY qur.qurum_id

Решение задачи: «Запрос и JOIN»

textual
Листинг программы
SELECT
        qurum_id, qurum,qurum1,
    SUM(CASE WHEN DATE_FORMAT(aa.input_date, '%m') BETWEEN 01 AND 06
        THEN 1 END) AS I,
    SUM(CASE WHEN DATE_FORMAT(aa.input_date, '%m') BETWEEN 07 AND 12
        THEN 1 END) AS II
    FROM qurum AS qur
    INNER JOIN (SELECT id, qurum1,input_date FROM DATA ) AS aa
            ON qur.qurum_id = aa.qurum1
    WHERE DATE_FORMAT(aa.input_date, '%Y') = $year
    GROUP BY qurum_id
    ORDER BY qurum_id

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

Ваш запрос выглядит так:

  1. SELECT - выбор всех столбцов, удовлетворяющих условию
  2. qurum_id, qurum,qurum1, - названия и значения переменных
  3. SUM(CASE WHEN DATE_FORMAT(aa.input_date, '%m') BETWEEN 01 AND 06 THEN 1 END) AS I - сумма с условием, что месяц в input_date находится в диапазоне от 01 до 06, иначе 0. Имя столбца I
  4. SUM(CASE WHEN DATE_FORMAT(aa.input_date, '%m') BETWEEN 07 AND 12 THEN 1 END) AS II - сумма с условием, что месяц в input_date находится в диапазоне от 07 до 12, иначе 0. Имя столбца II
  5. FROM qurum - таблица, из которой выбираются данные
  6. INNER JOIN (SELECT id, qurum1,input_date FROM DATA) AS aa ON qur.qurum_id = aa.qurum1 - таблица, с которой объединяются данные (DATA), и условие объединения (ON qur.qurum_id = aa.qurum1)
  7. WHERE DATE_FORMAT(aa.input_date, '%Y') = $year - условие, что год в input_date равен заданному значению (предполагается, что $year - это переменная или значение, которое уже определено в вашем коде или контексте)
  8. GROUP BY qurum_id - группировка по qurum_id
  9. ORDER BY qurum_id - сортировка по qurum_id Пожалуйста, обратите внимание, что некоторые элементы могут быть пропущены или некорректно записаны, так как код может быть более сложным и содержать дополнительные элементы, которые не видны в данном фрагменте.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

6   голосов , оценка 3.833 из 5