作者mimickent (mimic)
看板Database
标题[SQL ] postgressql 查询语法问题
时间Sat Nov 14 10:34:02 2009
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)