Oracle SQL Multiple count, если в одной строке

Я пытаюсь сделать некоторые отчеты с помощью SQL, но у меня проблемы с подсчетом в одной строке нескольких разных состояний профессионалом.

Вот образец данных:

назначение_ключ профессиональный тип_состояния date_init date_end 1 Джон Доу Запланированное 10.11.2020 10.12.2020 1 Джон Доу присутствовал 10.12.2020 НУЛЕВОЙ 2 Джон Доу Запланированное 10.12.2020 10.12.2020 2 Джон Доу присутствовал 10.12.2020 НУЛЕВОЙ 3 Джейн Доу Запланированное 10.11.2020 10.12.2020 3 Джейн Доу присутствовал 10.12.2020 НУЛЕВОЙ 4 Джейн Доу Запланированное 10.11.2020 10.12.2020 4 Джейн Доу ожидающий 10.12.2020 НУЛЕВОЙ 5 Джон Доу Запланированное 10.12.2020 14.10.2020 5 Джон Доу отменен 14.10.2020 НУЛЕВОЙ

Я пытаюсь показать что-то вроде этого, но ТОЛЬКО последнее состояние встречи:

Профессиональный total_scheduled всего_присутствовало total_waiting total_canceled Джон Доу 0 2 0 1 Джейн Доу 0 1 1 0

Я попытался сделать запрос, который подсчитывает только встречи с NULL date_end (нашел его на этом сайте), например:

SELECT DISTINCT prof.surname, 
SUM(CASE WHEN state_type.name = 'scheduled' THEN 1 ELSE 0 END) AS total_scheduled, 
SUM(CASE WHEN state_type.name = 'attended' THEN 1 ELSE 0 END) AS total_attended, 
SUM(CASE WHEN state_type.name = 'waiting' THEN 1 ELSE 0 END) AS total_waiting, 
SUM(CASE WHEN state_type.name = 'canceled' THEN 1 ELSE 0 END) AS total_canceled 
FROM (appointment, appointment_state, prof, state_type, etc.)
WHERE appointment_state.final_date IS NULL

(я знаю, что мне не нужно включать таблицу state_type, но она предназначена для демонстрации примера)

Проблема в том, что этот запрос по-прежнему подсчитывает все состояния от встречи x, независимо от оператора WHERE:

Профессиональный total_scheduled всего_присутствовало total_waiting total_canceled Джон Доу 6 2 0 1 Джейн Доу 4 1 1 0

Есть ли у вас какие-либо идеи или как мне структурировать запрос?

Извините, если что-то не так, пишу сюда впервые :)

Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандартный, читаемый синтаксис JOIN.

Gordon Linoff 11.12.2020 13:26

Да, я использую удобные JOINS в части FROM, приведенный выше код является просто примером.

cdpazos27 11.12.2020 14:30
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы начинаете с того, что говорите, что у вас есть данные. Ну, это данные, которые должны быть агрегированы. Если это запрос, вы можете использовать CTE:

with data as (
      <your query here>
     )
SELECT prof.surname, 
       SUM(CASE WHEN name = 'scheduled' THEN 1 ELSE 0 END) AS total_scheduled, 
       SUM(CASE WHEN name = 'attended' THEN 1 ELSE 0 END) AS total_attended, 
       SUM(CASE WHEN name = 'waiting' THEN 1 ELSE 0 END) AS total_waiting, 
       SUM(CASE WHEN name = 'canceled' THEN 1 ELSE 0 END) AS total_canceled 
FROM data
WHERE final_date IS NULL
GROUP BY surname

Да!! Спасибо! Я получил итоги легко с этим.

cdpazos27 11.12.2020 15:40

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