【发布时间】:2020-11-22 17:38:11
【问题描述】:
如何让这个查询在 GCP 大查询上运行而不会出错:
“不支持引用其他表的相关子查询,除非它们可以去相关,例如通过将它们转换为有效的 JOIN。”你们有什么想法可以解决这个冲突吗?
Select
x.subject_id as PatientId
,sum(x.BPS) as sbp
,sum(x.RR) as rr
,sum(x.sepsis) as sepsis
From (
Select
c.subject_id
,(
Select (Case
WHEN cast(c2.value as numeric) <= 90 THEN 3
WHEN cast(c2.value as numeric) >= 91 AND cast(c2.value as numeric) <= 100 THEN 2
WHEN cast(c2.value as numeric) >= 101 AND cast(c2.value as numeric) < 110 THEN 1
WHEN cast(c2.value as numeric) >= 111 AND cast(c2.value as numeric) < 219 THEN 0
WHEN cast(c2.value as numeric) >= 220 THEN 3
else 0
End)
From chartevents c2
Where c2.subject_id = c.subject_id
and c2.itemid = c.itemid
limit 1
) as BPS
,0 as RR
,0 as sepsis
From
chartevents c
Where
c.itemid = 220050
Group by
c.subject_id
,c.itemid
Union all
Select
c.subject_id
,0 as BPS
,(Select (Case
WHEN cast(c2.value as numeric) <= 8 THEN 3
WHEN cast(c2.value as numeric) >= 9 AND cast(c2.value as numeric) <= 11 THEN 1
WHEN cast(c2.value as numeric) >= 12 AND cast(c2.value as numeric) <= 20 THEN 0
WHEN cast(c2.value as numeric) >= 21 AND cast(c2.value as numeric) <= 24 THEN 2
WHEN cast(c2.value as numeric) >= 25 THEN 3
else 0
End)
From chartevents c2
Where c2.subject_id = c.subject_id
and c2.itemid = c.itemid
limit 1
) as RR
,0 as sepsis
From
chartevents c
Where
c.itemid = 220210
Group by
c.subject_id
,c.itemid
Union all
Select
c.subject_id
,0 as BPS
,0 as RR
,(case when exists (
Select 1
From diagnoses_icd d
Where d.subject_id = c.subject_id
and d.icd9_code like '%99591%'
)
then 1
else 0
end) as sepsis
From
chartevents c
Where
c.itemid = 228334
Group by
c.subject_id
,c.itemid
) x
Group by
x.subject_id
limit 5
;
|患者 ID | sbp | rr |败血症|期望的输出:
| 1 | 0 | 0 | 0 |
| 2 | 2 | 3 | 1 |
【问题讨论】:
-
样本数据和所需结果将使您的问题更容易理解。
-
除了GMB所说的,我还强烈建议简化查询。
-
我添加了更多信息。我怎样才能简化这个查询并带来相同的结果。 @GordonLinoff
-
@ViniciusFerreira。 . .例如,您可能不需要所有列来生成错误。该错误可能仅在
union all的一个子查询中产生。有两个想法。
标签: sql google-bigquery union-all correlated-subquery spring-cloud-gcp-bigquery