【发布时间】:2021-09-04 13:45:56
【问题描述】:
我有一张看起来像的桌子
| UserId | Source | HeartRate | BreathRate |
|---|---|---|---|
| uuid | 100 | 67 | 20 |
| uuid | 200 | 67 | 24 |
| uuid | 100 | 67 | 21 |
| uuid | 200 | 67 | 19 |
| uuid | 100 | 69 | 25 |
| uuid | 200 | 69 | 22 |
| uuid | 200 | 69 | 23 |
(select
"UserId",
"Source",
avg(case when "HeartRate" > 0 then "HeartRate" end)::int as "HeartRate",
avg(case when "BreathRate" > 0 then "BreathRate" end)::int as "BreathRate"
from vitals
where "UserId"='66fd490f-4d93-47d1-bc65-085f676bdaf2' and "Source"=200
group by "UserId", "Source" order by "UserId")
union
(select
"UserId",
"Source",
avg(case when "HeartRate" > 0 then "HeartRate" end)::int as "HeartRate",
avg(case when "BreathRate" > 0 then "BreathRate" end)::int as "BreathRate"
from vitals
where "UserId"='66fd490f-4d93-47d1-bc65-085f676bdaf2' and "Source"=100
group by "UserId", "Source" order by "UserId")
如果有 2 个不同的来源,上述查询会产生 2 个结果。一个用于Source=100,另一个用于Source=200。结果中的行数应该(如果有足够的数据可用)等于不同 Source 值的数量。
如何更改上述查询,使其不依赖于多个选择的联合和Source 的静态值
【问题讨论】:
标签: sql postgresql query-optimization union