Сложный запрос с использованием join, count и group by - MySQL

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

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

Добрый день всем! Ситуация такая: есть таблица

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          ххххххх
-- Так вот в моем запросе строка №4 не попадает в результирующий набор. Помогите решить проблему.

Решение задачи: «Сложный запрос с использованием 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;

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

  1. tab - название таблицы, из которой производится выборка данных
  2. GR - название столбца, по которому происходит группировка данных
  3. state - название столбца, по которому производится условное суммирование данных
  4. PTP_ON - название результирующей переменной, которая равна сумме значений столбца state, если значение столбца GR равно 1
  5. PTP_OF - название результирующей переменной, которая равна сумме значений столбца state, если значение столбца GR равно 0

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


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

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

9   голосов , оценка 3.667 из 5