Запрос Oracle — Как посчитать две отдельные строки за одну в зависимости от их значения

#oracle

Вопрос:

У меня есть такой стол:

ID врач идентификатор заказа экзамен Цена
0 Физик1 111 ТТГ 1
1 Физик1 111 FT3 0
2 Физик1 112 FT4 0
3 Физик1 112 FT3 0
3 Физик1 113 FT3 0
3 Физик1 113 FT4 0

И у меня есть такой запрос:

 SELECT   physician,   COUNT(DISTINCT order_id) sum,  CASE price   WHEN 0 THEN 'Free'  ELSE 'Paid'  END AS is_free FROM  table GROUP BY  physician,  CASE price   WHEN 0 THEN 'Free'  ELSE 'Paid'  END  

И в результате получается что-то вроде этого:

врач сумма is_free
Врач1 3 Бесплатно
Врач1 1 Оплачено

Как я могу изменить этот запрос на подсчет order_id=111(и других, которые могут отображаться в БД) только как оплаченные, а не как оба.

Таким образом, конечный результат будет:

врач сумма is_free
Врач1 2 Бесплатно
Врач1 1 Оплачено

Комментарии:

1. можете ли вы отредактировать последнюю часть вашего вопроса, чтобы мы могли увидеть желаемый результат

2. Извините. Исправлено. Странная вещь, потому что предварительный просмотр показывал это правильно.

Ответ №1:

Сначала сведите свои данные только к одной строке для каждого врача и заказа. Тогда считай.

 select physician, pay_mode, count(*) from (  select  physician,  order_id,  max(case when price = 0 then 'free' else 'paid' end) as pay_mode  from mytable  group by physician, order_id ) orders group by physician, pay_mode order by physician, pay_mode;  

Комментарии:

1. Это именно то, что я искал. Большое спасибо.