具有max函数的SQL内连接

时间:2012-12-16 07:25:18

标签: sql

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

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

2 个答案:

答案 0 :(得分:15)

如果您想找到哪位患者已经为每位医生支付了最高费用, 这个查询应该这样做:

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)

答案 1 :(得分:4)

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

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

<强>结果

Afzaal      Dr.Saim         550
Mufaddil    Dr.Rizwan       2000
Shayan      Dr.Saim         1600
Zahid       Dr.Kamran       700
Zeeshan     Dr.Bilal        1700