首页 > 解决方案 > SQL 查询以查找与表中其他元素相关的最常见元素

问题描述

我有一个包含以下表格的医院数据库:

equipment

id CHAR(40) NOT NULL, model CHAR(20) NOT NULL, serialno VARCHAR(20) NOT NULL, release_date DATE, PRIMARY KEY (id)

appointmentrelations
appointment_id CHAR(40) NOT NULL, 
 medicine_id    CHAR(40) NOT NULL, 
 equipment_id   CHAR(40) NOT NULL,
 PRIMARY KEY (appointment_id, medicine_id, equipment_id), 
 FOREIGN KEY (appointment_id) REFERENCES appointment(id), 
 FOREIGN KEY (medicine_id)REFERENCES medicineprice(medicine_id), 
 FOREIGN KEY (equipment_id) REFERENCES equipment(id)

和其他一些其他表格。

预约表描述了医院的预约,并将预约与其中使用的设备和药物联系起来。

我想写一个查询,找出与他的年龄相关的最常用的设备。

appointmentrelations
a1    m1    e1  
a2    m2    e2
a3    m3    e3
a4    m3    e3
a5    m4    e2

equipment
e1  model1  se1 2004-07-14
e2  model2  se2 2017-10-19
e3  model3  se3 2015-01-08

在上面的示例中,与他的年龄相关的使用最多的设备是 e2。

我尝试了以下方法:

SELECT equipment_id, COUNT(DISTINCT appointment_id) AS ab
FROM appointmentrelations
GROUP BY equipment_id
ORDER BY ab DESC
LIMIT 1

计算每种设备使用的不同约会的数量,但我不知道如何将其与设备年龄联系起来。

标签: sql

解决方案


如果我理解正确,您可以将当前查询包装在subquery

SELECT * 
FROM equipment e
WHERE id  = (SELECT equipment_id
             FROM appointmentrelations
             GROUP BY equipment_id
             ORDER BY COUNT(DISTINCT appointment_id) DESC
             LIMIT 1);

推荐阅读