我有一个患者,医生,橱柜和探访的数据库。
患者( id_pac ,FirstName,LastName)
医生( id_med ,FirstName,LastName,Specialty)
机柜( id_cab ,名称)
Vizits(id_viz,Date_viz, Medic_id,Patient_id,Cabinet_id )
一位医生可以在不同的病房,不同的日期对不同的病人进行探访。
我需要在一份报告中找出(使用子查询或使用连接?,但不能找到中间表或视图):
我试图找出如何获得这些信息,但我能拥有的只是 他访问的每个橱柜的医生名单,总访问次数/内阁:((
答案 0 :(得分:1)
SELECT CONCAT(d.FirstName,' ',d.LastName) AS CompleteName
, c.Name AS CabinetName
, dv.MaxVisits AS MaxVisits
FROM Doctors AS d
LEFT JOIN
( SELECT Medic_id
, MAX(NumVisits) AS MaxVisits
FROM
( SELECT Medic_id
, Cabinet_id
, COUNT(*) AS NumVisits
FROM Vizits AS v
GROUP BY Medic_id
, Cabinet_id
) AS grp
GROUP BY Medic_id
) AS dv
ON dv.Medic_id = d.id_med
LEFT JOIN
( SELECT Medic_id
, Cabinet_id
, COUNT(*) AS NumVisits
FROM Vizits AS v
GROUP BY Medic_id
, Cabinet_id
) AS mcv
ON mcv.Medic_id = dv.Medic_id
AND mcv.NumVisits = dv.MaxVisits
LEFT JOIN Cabinets AS c
ON c.id_cab = mcv.Cabinet_id
答案 1 :(得分:0)
我试图更好地理解这个子查询,我找到了另一种方式(我相信一个简单的方法)。代码是:
SELECT
CONCAT(me.Nume,' ',me.Prenume) AS Medic,
x.Denumire,
MAX(x.nrviz) AS maxviz
FROM (
SELECT DISTINCT
v.Medic_id,
c.Denumire,
COUNT(v.id_viz) AS nrviz
FROM
vizite v
LEFT JOIN
cabinete c
ON(v.Cabinet_id=c.id_cab)
GROUP BY
v.Medic_id,
v.Cabinet_id
ORDER BY
nrviz DESC) as x
LEFT JOIN
medici me
ON (x.Medic_id=me.id_med)
LEFT JOIN
cabinete ca
ON (x.Denumire=ca.Denumire)
GROUP BY
Medic
ORDER BY
Medic,
maxviz DESC
@ypercube:如果你看到一些不同之处,请告诉我,因为看看我是忘了还是逃避了什么很重要。