Сложный запрос с использованием join, count и group by - MySQL
Формулировка задачи:
Добрый день всем!
Ситуация такая: есть таблица
--
Так вот в моем запросе строка №4 не попадает в результирующий набор.
Помогите решить проблему.
Tab1
где храняться даные об установленых ретрансляторахPTP
, ретрансляторы обьеденены в группыGR
по териториальному признаку а группы разбиты по городамCity
, также есть полеADDRESS
- адррес смонтированого оборудованияPTP
, и статусState
- включен/выключен. Структура таблици и описание:FIELD |TYPE |NULL |KEY |DEFAULT |Extra ------------------------------------------------------------- City |VARCHAR(255) |NO | |0 | GR |SMALLINT(5) UNSIGNED |NO | |0 | PTP |SMALLINT(5) UNSIGNED |NO | PRI |0 | State |SMALLINT(5) UNSIGNED |NO | |0 | ADDRESS |VARCHAR(255) |NO | |0 |
ЗАДАЧА:
Вывести количество включеных и выключеныхPTP
на момент выполнения запроса в привязке кGR
иCity
.City, GR, COUNT(PTP) PTP_ON, COUNT(PTP) PTP_OFF, ADDRESS
МОЕ РЕШЕНИЕ:
SELECT DISTINCT(t1.GR), t2.PTP_ON, t3.PTP_OFF FROM Tab1 t1 JOIN (SELECT GR, COUNT(PTP) AS PTP_ON FROM Tab1 WHERE state=1 GROUP BY GR) t2 ON t1.GR=t2.GR JOIN (SELECT GR, COUNT(PTP) AS PTP_OFF FROM Tab1 WHERE state=0 GROUP BY GR) t3 ON t1.GR=t3.GR GROUP BY t1.GR
В чем проблема:
В результирующий набор даных не попадают строки где в джойнахGR
- существует,count(PTP) as PTP_ON
- существует, но прии этомGR
- существует,count(PTP) as PTP_ON
- не существует.ПРИМЕР:
City, GR, COUNT(PTP) PTP_ON, COUNT(PTP) PTP_OFF, ADDRESS 2 2 5 1 ххххххх 3 3 11 3 ххххххх 3 4 6 0 ххххххх
Решение задачи: «Сложный запрос с использованием join, count и group by»
textual
Листинг программы
select GR, sum(if(state=1,1,0)) as PTP_ON, sum(if(state=0,1,0)) as PTP_OF from `tab` group by GR;
Объяснение кода листинга программы
tab
- название таблицы, из которой производится выборка данныхGR
- название столбца, по которому происходит группировка данныхstate
- название столбца, по которому производится условное суммирование данныхPTP_ON
- название результирующей переменной, которая равна сумме значений столбцаstate
, если значение столбцаGR
равно 1PTP_OF
- название результирующей переменной, которая равна сумме значений столбцаstate
, если значение столбцаGR
равно 0
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д