我有一个大的:
| name |surname| date_of_birth |hospital| op_id | op_date | medical_branch |
|++++++|+++++++|+++++++++++++++|++++++++|+++++++|+++++++++|++++++++++++++++|
| | | | | | | |
这是一张包含大约 500 家医院一年内的医疗手术记录的表格。大约有 3 亿行。
我的问题是:
对于每家 X 医院,有多少婴儿在同一家医院出生后立即(同一天)接受了重症监护?
例如,在 A 医院,100 名婴儿出生,其中 20 名婴儿在同一天在同一家医院被送往重症监护室。
P619920 是出生的操作ID。记录母亲的身份信息是为了出生,而不是婴儿。
I552015 是重症监护的手术 ID。记录婴儿的身份证信息。
首先,我通过以下方式隔离医院 A:
create table hospital_A as ( select * from BIGTABLE where hospital = 'A' )
医院_A的模式是这样的:
| name |surname| date_of_birth|hospital| op_id | op_date | medical_branch |
|+++++++|+++++++|++++++++++++++|++++++++|+++++++|+++++++++++|+++++++++++++++++ |
| Mary | White | 01.02.1981 | A |P619920| 09.12.2011| Gynecology |
| John | White | 09.12.2011 | A |I552015| 09.12.2011|Infantile diseases|
我试图匹配:
a) 婴儿和母亲的姓氏
b) 操作日期。
select distinct
t.name
,t.surname
,t.op_date
,t.op_id
,t.medical_branch
,v.name
,v.surname
--,v.op_id
,v.medical_branch
,v.date_of_birth
,v.hospital
from hospital_A t, hospital_A v
where t.op_date=v.date_of_birth
and t.surname=v.surname
and t.op_id = 'P619920'
and v.op_id = 'I552015'
这给了我 20 行。
但是,当我对 BIGTABLE 应用相同的查询时,医院 A 有 81 行。
我理解这种差异源于在其他医院出生但在同一天被送往医院 A 接受重症监护的婴儿。
在 BIGTABLE 中,模式类似于:
| name |surname|date_of_birth|hospital| op_id | op_date | medical_branch |
|+++++++|+++++++|+++++++++++++|++++++++|+++++++++|++++++++++|++++++++++++++++++|
| Mary | White | 01.02.1981 | A | P619920 |09.10.2011| Gynecology |
| John | White | 09.10.2011 | A | I552015 |09.10.2011|Infantile diseases|
| Ellen | Young | 04.09.1978 | B | P619920 |07.12.2011| Gynecology |
| Robert| Young | 07.12.2011 | A | I552015 |07.12.2011|Infantile diseases|
因此,BIGTABLE 的结果与孤立的 hospital_A 表不同,因为它包含医院 B。
我对 BIGTABLE 的查询应该提取在同一家医院发生的同一天出生的重症监护组合。
结果表:
| hospital | total births | intensive_care_babies |
|----------|--------------|-----------------------|
| A | 100 | 20 |
| B | ... | .. |