#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. Это именно то, что я искал. Большое спасибо.