我正在尝试通过他们的XXX服务评级来排序医院。
我有以下表格
hospital (hid, name)
sratings (Service ratings) (hospitalId, ratingValue, serviceId)
services (sid, name
hrating (hid, ratingvalue)
服务包含500多项服务。 我也为xx服务提供服务“sid”
例如,如果我选择服务心脏病学,它应该按照分级服务评级排序前50家医院。
什么是正确的查询。 我已经做过的一部分查询,它选择了所有的医院,并为他们分配了从另一张桌子上取得的评分,但现在这是无关紧要的。只想排序并获得服务xx评级的前50家医院
SELECT
hospital.*,
(SELECT AVG(hrating.rating_h)
FROM hrating
WHERE hrating.hid = hospital.hid) as overall_rating
FROM hospital
答案 0 :(得分:1)
只需加入您的表格,然后对结果进行排序:
SELECT hospital.*
FROM hospital
JOIN sratings ON sratings.hospitalId = hospital.hid
JOIN services ON services.sid = sratings.serviceId
WHERE services.name = 'Cardiology'
ORDER BY sratings.ratingValue DESC
LIMIT 50
上述查询假定(hospitalId, serviceId)
中sratings
是唯一的(例如,它是该表的主键)。否则,您必须定义如何对具有同一服务的多个评级的医院进行排序,例如按平均评级:
SELECT hospital.*
FROM hospital
JOIN sratings ON sratings.hospitalId = hospital.hid
JOIN services ON services.sid = sratings.serviceId
WHERE services.name = 'Cardiology'
GROUP BY hospital.hid
ORDER BY AVG(sratings.ratingValue) DESC
LIMIT 50