私はビッグテーブルを持っています:
| name |surname| date_of_birth |hospital| op_id | op_date | medical_branch |
|++++++|+++++++|+++++++++++++++|++++++++|+++++++|+++++++++|++++++++++++++++|
| | | | | | | |
年間約500病院の診療実績をまとめた表です。約 3 億行あります。
私の質問は:
X 病院ごとに、同じ病院で何人の赤ちゃんが生まれ、そのうち何人が生後すぐに (同じ日に) 集中治療を受けましたか?
たとえば、病院 A では、100 人の赤ちゃんが生まれ、そのうちの 20 人が同じ病院で同じ日に集中治療室に運ばれました。
P619920 は、誕生の操作 ID です。母親のID情報は、赤ちゃんではなく出生時に記録されます。
I552015 は、集中治療の操作 ID です。赤ちゃんのID情報が記録されます。
まず、次の方法で病院 A を隔離しました。
create table hospital_A as ( select * from BIGTABLE where hospital = 'A' )
Hospital_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 の結果は、病院 B が含まれているため、分離された Hospital_A テーブルとは異なります。
BIGTABLE に対する私のクエリは、同じ病院で発生した同日出産と集中治療の組み合わせを抽出する必要があります。
結果のテーブル:
| hospital | total births | intensive_care_babies |
|----------|--------------|-----------------------|
| A | 100 | 20 |
| B | ... | .. |