我有這樣的表:
| 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
結果是這樣的:
| 醫師 | 和 | 免費 |
|---|---|---|
| 醫師1 | 3 | 自由 |
| 醫師1 | 1 | 有薪酬的 |
如何更改此查詢以僅將 order_id=111(以及可能出現在資料庫中的其他查詢)計為已付費而不是兩者。
所以最終的結果是:
| 醫師 | 和 | 免費 |
|---|---|---|
| 醫師1 | 2 | 自由 |
| 醫師1 | 1 | 有薪酬的 |
uj5u.com熱心網友回復:
首先將您的資料歸結為每個醫生和訂單只有一行。然后數。
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338215.html
標籤:甲骨文
