[SQL ] postgressql 查詢語法問題

看板Database作者 (mimic)時間16年前 (2009/11/14 10:34), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
table schema lists as below Patients(pid, pname, major-did) Doctor(did, dname) Medicine(mid, mname) Report(rid, date, pid) Medicinetaken(rid, mid, dose) 每個病人都有個主治醫生~ 我想找出 每個醫生最常開給病人的藥名 這是必要join 所有table 例如如下 Doctor Patient Report Medicine did pid rid mid mname --------------------------------------- 1 a1 01 001 藥名(ex: aspirin) 1 a1 01 002 以下都省略 1 a1 01 003 2 a2 02 004 2 a3 03 005 3 a4 04 002 3 a4 05 001 以下省略 所以我想要列出表格 "醫生名字", "常用藥品名稱" 兩個欄位 我個人的想法是 要運用到group by 跟 count(), max()兩個函式 假使以上面表格我先group by did 產生了表格二 did pid rid mid mname ----------------------------------------- 1 a1 01 001 藥名省略 a1 01 002 a1 01 003 2 a2 02 004 a3 03 005 3 a4 04 002 a4 05 001 那麼接下來,我想要group by mid 這樣才能count(mid) 了解該醫生開某藥物的次數 再來用 max(count(mid)) 來取其最大值,即可找到開出最頻繁的藥物mid 問題1是如何使用group by來限制其依照醫生的group 來group by mid 問題2是如何取count()產生的最大值 (我上網查SQL 似乎有TOP 但是沒作用在postgresql) 以下是我的作法,希望板上先進們能不吝給予指導 SELECT dname, mname FROM Doctor, Medicine, ...... WHERE Doctor.did = Patient.major-did and 省略.... and Medicine.mid in ( SELECT mid, max(x.count) FROM (SELECT O.mid, count(O.mid) FROM ( SELECT Doctor.did, mid FROM --省略 WHERE --省略 GROUP BY did //產生表格二) as O GROUP BY O.mid) as X //針對先前group by的範圍(did) 再計算開藥次數 WHERE mid = x.mid ) 但是錯誤很多~ 不曉得有沒有比較好一點的方式來查詢?????? 謝謝各位花時間看完這篇問題~ 有請各位幫忙解惑~ 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 75.83.250.57 ※ 編輯: mimickent 來自: 75.83.250.57 (11/14 10:41)
文章代碼(AID): #1A_XSTA0 (Database)