Запрос и JOIN - MySQL
Формулировка задачи:
Добрый день. Я написал 2 запроса. Скажите, пожалуйста, как правильнее? 1 или 2?
1. 2.и 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 GROUP BY `qurum_id` ORDER BY qur.qurum_id
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
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
Объяснение кода листинга программы
Ваш запрос выглядит так:
- SELECT - выбор всех столбцов, удовлетворяющих условию
- qurum_id, qurum,qurum1, - названия и значения переменных
- SUM(CASE WHEN DATE_FORMAT(aa.input_date, '%m') BETWEEN 01 AND 06 THEN 1 END) AS I - сумма с условием, что месяц в input_date находится в диапазоне от 01 до 06, иначе 0. Имя столбца I
- SUM(CASE WHEN DATE_FORMAT(aa.input_date, '%m') BETWEEN 07 AND 12 THEN 1 END) AS II - сумма с условием, что месяц в input_date находится в диапазоне от 07 до 12, иначе 0. Имя столбца II
- FROM qurum - таблица, из которой выбираются данные
- INNER JOIN (SELECT id, qurum1,input_date FROM DATA) AS aa ON qur.qurum_id = aa.qurum1 - таблица, с которой объединяются данные (DATA), и условие объединения (ON qur.qurum_id = aa.qurum1)
- WHERE DATE_FORMAT(aa.input_date, '%Y') = $year - условие, что год в input_date равен заданному значению (предполагается, что $year - это переменная или значение, которое уже определено в вашем коде или контексте)
- GROUP BY qurum_id - группировка по qurum_id
- ORDER BY qurum_id - сортировка по qurum_id Пожалуйста, обратите внимание, что некоторые элементы могут быть пропущены или некорректно записаны, так как код может быть более сложным и содержать дополнительные элементы, которые не видны в данном фрагменте.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д