首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL inner join with max函数

SQL inner join with max函数
EN

Stack Overflow用户
提问于 2012-12-16 15:25:18
回答 2查看 49.1K关注 0票数 3

我在这个查询中有一些问题,我想看看谁向哪个医生支付了最高费用?我已经创建了3个表名是tblPatient,tblClinic和tblDoctor,现在我已经在PID和DID列的tblClinic表上设置了外键,现在我可以在这个查询中做什么,这样我就可以得到我想要的结果了。

代码语言:javascript
复制
create database Hospital
use Hospital

create table tblPatient
(
PID int identity(100,1) primary key not null,
PName varchar(20),
PPhone varchar(20)
)

create table tblClinic
(
CID int identity(300,1) primary key not null,
PID int,
DID int,
Fees int,
foreign key(PID) references tblPatient(PID),
foreign key(DID) references tblDoctor(DID)
)

create table tblDoctor
(
DID int identity(200,1) primary key not null,
DName varchar(20),
DPhone varchar(20),
)

insert into tblPatient values('Zeeshan',033314785)
insert into tblPatient values('Mufaddil',034521548)
insert into tblPatient values('Shayan',033236981)
insert into tblPatient values('Zahid',0334425632)
insert into tblPatient values('Afzaal',030178945)
insert into tblClinic values (100,201,1500)
insert into tblClinic values (102,202,1600)
insert into tblClinic values (103,204,700)
insert into tblClinic values (101,201,800)
insert into tblClinic values (101,200,600)
insert into tblClinic values (103,202,650)
insert into tblClinic values (104,202,550)
insert into tblClinic values (102,203,840)
insert into tblClinic values (101,203,2000)
insert into tblClinic values (100,204,250)
insert into tblClinic values (100,201,1700)
insert into tblClinic values (101,202,1650)
insert into tblClinic values (104,204,300)
insert into tblDoctor values ('Dr.Amir',033412345)
insert into tblDoctor values ('Dr.Bilal',034554125)
insert into tblDoctor values ('Dr.Saim',033358741)
insert into tblDoctor values ('Dr.Rizwan',033325871)
insert into tblDoctor values ('Dr.Kamran',030025874)

select * from tblPatient
select * from tblClinic
select * from tblDoctor

select p.PName,d.DName
from tblPatient p
inner join
tblClinic c
ON p.PID=c.PID
inner join
tblDoctor d
ON d.DID=c.DID
where PName in ('Zeeshan','Shayan','Afzaal')

select d.DName,p.PName
from tblDoctor d
inner join
tblClinic c
ON d.DID=c.DID
inner join
tblPatient p
ON p.PID=c.PID
where d.DName in ('Dr.Bilal','Dr.Kamran','Dr.Amir')
order by d.DName,p.PName asc

select d.DName,p.PName,c.Fees
from tblDoctor d
inner join
tblClinic c
ON d.DID=c.DID
inner join
tblPatient p
ON p.PID=c.PID
where d.DName in ('Dr.Bilal','Dr.Kamran','Dr.Amir')
order by d.DName,p.PName asc
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-16 18:33:06

如果您想要找出哪个患者为每个医生支付了最高费用,则此查询应执行以下操作:

代码语言:javascript
复制
SELECT P.PName, D.DName, C.Fees
FROM tblClinic C
INNER JOIN tblPatient P ON P.PID = C.PID
INNER JOIN tblDoctor D ON D.DID = C.DID
WHERE C.Fees =
(SELECT max(Fees) FROM tblClinic C2
WHERE C2.DID = C.DID)
票数 16
EN

Stack Overflow用户

发布于 2012-12-16 18:58:26

尝尝这个。这是working example from your data

代码语言:javascript
复制
select pname,dname, fee 
from (
   select pname, dname, max(fees) fee, 
          rank() over (order by p.pname) rk, 
          row_number() over (order by p.pname,max(fees) desc) rn
   from tblClinic c join tblPatient p on c.pid = p.pid
                 join tblDoctor d on c.did = d.did
   group by pname,dname
  ) T
where rk = rn

结果

代码语言:javascript
复制
Afzaal      Dr.Saim         550
Mufaddil    Dr.Rizwan       2000
Shayan      Dr.Saim         1600
Zahid       Dr.Kamran       700
Zeeshan     Dr.Bilal        1700
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13899407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档