2015-09-27 55 views
1

我有一個patient表中的號碼和reference表如下的MySQL - 計數的患者

patient

id   name 
1   Doni 
2   Doni 
3   Doni 
4   Tejo 
5   Bambang 

reference

patient_id refer_to_patient_id 
1    2 
2    3 
3    null 

refer_to_patient_id空指病人的名字,多尼是提到另一家醫院,但它提到的醫院沒有創造一項記錄。

我需要指出他們有多少患者。上面的例子應該返回3個患者,因爲記錄號1,2,3是同一個患者。 即使對於同一患者,患者姓名也可能不同,因爲他們是從不同的醫院輸入的。

PS:患者表實際上不是患者實體,而是醫療記錄(EMR),醫院可以將患者(或EMR)轉診到另一家醫院,並將其計爲單個患者。

+0

您參考表可以是1個病人的整個樹結構嗎?可以確定的是,在這種結構中沒有周期? –

+0

從不同的EMR系統中重複複製患者是一個非常困難的問題。在沒有至少生日的情況下嘗試它似乎很奇怪。只是在說。 –

+0

不要擔心這一點。這不是醫院系統的高科技關鍵電子病歷。這只是醫學社會用於研究的簡單數據。是的,實際上有出生日期。 –

回答

1

雖然一開始好像你需要解決滿樹,我覺得你問的問題很簡單,只要

select 
    count(distinct pat.id) patients 
from 
    patient pat 
    left outer join reference ref on pat.id = ref.patient_id 
where 
    ref.patient_id is null; 

也就是說,id只應該在計算它沒有到另一個地圖id。換句話說,任何沒有映射值的id值都是層次結束。

+0

嗨,對不起我編輯了參考表。你的解決方案几乎可以工作,直到'refer_to_patient_id'中的引用爲空。 refer_to_patient_id null表示患者姓名Doni被轉診到另一家醫院,但它所指的醫院沒有創建記錄。 –

+0

然後它聽起來像你需要計算這種情況。只需添加另一個地方,使其看起來像'where ref.patient_id爲null或ref.refer_to_patient_id爲null' –

0

MySQL有一個DISTINCT關鍵字。

SELECT count(DISTINCT name) 
FROM patient; 
+0

嗨,對不起,我忘了告訴你,即使是同一個病人,名字的價值也可能不同。 –

+0

我看不出你如何識別DISTINCT患者。根據你的描述,沒有唯一的標識符或標識符的組合,可以在1多尼和2多尼 –

+0

這就是爲什麼有'參考表 –