簡單業務sql記錄

2021-08-21 09:34:45 字數 679 閱讀 8742

需求是這樣的,統計一家醫院的返院人數:其中會涉及到三張表:病人表,計畫表,任務表。乙個病人看完病之後可能會制定乙個或者多個計畫,乙個計畫也有可能有多個任務,其中任務表中有乙個is_back欄位,等於1 即為返院,等於0 即為未返院。查詢該月返院人數,其實很簡單,基礎資料就是已制定計畫人數,但是要注意,需要用病人id主鍵做groupby操作。因為病人表和計畫表是一對多的。

問題來了。計算未返院人數的時候,因為乙個計畫可能有多個任務,每個任務都會有is_back 只要其中,當前病人的其中乙個計畫中的其中乙個任務的is_back=1,那麼就統計成返院。所以計算返院是單向關係,只要判斷is_back等於1就可以,但是未返院如果單純用is_back=0去判斷,再用patient_id去分組,那麼一定會有重複資料。因為計畫中的任務為0也可能為1,就是,返院的人數一樣會被統計進去。

一開始我想了很久,操作臨時表的一些操作等……但是臨時表畢竟不是儲存在真正磁碟裡的資料...而且害怕一下子萬一刪除真實資料後悔莫及啊。後來我想了兩個辦法:

方法一:直接算出這個時間段的計畫人數減去返院人數,就是未返院人數了。這個方法還是有些,不入流……不專業

方法二:就是用sql解決。統計出is_back=0的人的病人id,然後把is_back=1的返院的病人id取出來,用not in解決。再進行乙個count(*)就可以了。其實就是很簡單的兩個子查詢,再來乙個not in+count(*)即可解決了……

sql語句的簡單記錄

sql查詢總結 1.單錶查詢 select from a ps 查詢a表中所有資料 2.單錶帶條件查詢 select from a where 查詢條件 ps 查詢符合 查詢條件 的所有記錄 3.單錶分組統計 select classid,count as number from a group b...

sql業務分割

create function strtotable str varchar 1000 returns tablename table str2table varchar 50 as 該函式用於把乙個用逗號分隔的多個資料字串變成乙個表的一列,例如字串 1,2,3,4,5 將程式設計乙個表,這個表 b...

sql注入學習簡單記錄

參考文章 參考學習 google search inurl products.php?prodid inurl buy.php?category order by 1 order by 6 union select 1,2,3,4,5,6,7,8,9,10,11 有時伺服器不能直接理解 versio...