SQL-запрос для отчета по имени с большим количеством столбцов по статусу

Можно ли с помощью sql-запроса создать группу отчетов по имени с подсчетом по статусу.

Таблицы:

  • Проект (id, name, status_id, service_id)
  • Статус (идентификатор, имя)
  • Сервис (идентификатор, название)

Мне нужно сделать отчет, считать по статусной группе по сервису:

Результаты столбцов: название службы, название статуса 1, название статуса 2, название статуса 3, итог

Результаты строк:

service name 1, 30, 10, 20, 60
service name 2, 10, 5, 40, 55
service name 3, 0, 2, 8, 10

Можете ли вы добавить некоторые значения, чтобы сделать пример понятным?

AirlineDog 21.12.2020 11:20
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, вам нужны соединения и условная агрегация:

select se.name as service_name,
    sum(case when st.name = 'status 1' then 1 else 0 end) as cnt_status_1,
    sum(case when st.name = 'status 2' then 1 else 0 end) as cnt_status_2,
    sum(case when st.name = 'status 3' then 1 else 0 end) as cnt_status_3,
    count(*) as total
from project p
inner join status  st on st.id = p.status_id
inner join service se on se.id = p.service_id
group by se.id, se.name

Хорошо работает, но если у меня есть 10 «имя статуса», мне нужно дублировать строку «сумма» для каждого другого статуса? Есть ли способ автоматического суммирования/подсчета для каждого используемого статуса?

BasicCoder 21.12.2020 11:29

@BasicCoder: нет, не в стандартном SQL. Вам понадобится динамический SQL, который намного сложнее.

GMB 21.12.2020 11:29

Другие вопросы по теме