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

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

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

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

Tab1

где храняться даные об установленых ретрансляторах

PTP

, ретрансляторы обьеденены в группы

GR

по териториальному признаку а группы разбиты по городам

City

, также есть поле

ADDRESS

- адррес смонтированого оборудования

PTP

, и статус

State

- включен/выключен. Структура таблици и описание:
Листинг программы
  1. FIELD |TYPE |NULL |KEY |DEFAULT |Extra
  2. -------------------------------------------------------------
  3. City |VARCHAR(255) |NO | |0 |
  4. GR |SMALLINT(5) UNSIGNED |NO | |0 |
  5. PTP |SMALLINT(5) UNSIGNED |NO | PRI |0 |
  6. State |SMALLINT(5) UNSIGNED |NO | |0 |
  7. ADDRESS |VARCHAR(255) |NO | |0 |

ЗАДАЧА:

Вывести количество включеных и выключеных

PTP

на момент выполнения запроса в привязке к

GR

и

City

.
Листинг программы
  1. City, GR, COUNT(PTP) PTP_ON, COUNT(PTP) PTP_OFF, ADDRESS

МОЕ РЕШЕНИЕ:

Листинг программы
  1. SELECT DISTINCT(t1.GR), t2.PTP_ON, t3.PTP_OFF
  2. FROM Tab1 t1
  3. JOIN (SELECT GR, COUNT(PTP) AS PTP_ON FROM Tab1 WHERE state=1 GROUP BY GR) t2 ON t1.GR=t2.GR
  4. JOIN (SELECT GR, COUNT(PTP) AS PTP_OFF FROM Tab1 WHERE state=0 GROUP BY GR) t3 ON t1.GR=t3.GR
  5. GROUP BY t1.GR

В чем проблема:

В результирующий набор даных не попадают строки где в джойнах

GR

- существует,

count(PTP) as PTP_ON

- существует, но прии этом

GR

- существует,

count(PTP) as PTP_ON

- не существует.

ПРИМЕР:

Листинг программы
  1. City, GR, COUNT(PTP) PTP_ON, COUNT(PTP) PTP_OFF, ADDRESS
  2. 2 2 5 1 ххххххх
  3. 3 3 11 3 ххххххх
  4. 3 4 6 0 ххххххх
-- Так вот в моем запросе строка №4 не попадает в результирующий набор. Помогите решить проблему.

Решение задачи: «Сложный запрос с использованием join, count и group by»

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

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

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

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