从子查询选取max函数最大值及对应facid的SQL问题排查
问题原因
- 外层查询额外按照
facid做了分组操作。子查询的输出已经是「每个设施ID对应唯一的总预订槽位量」的结果集,按facid分组后每个分组仅包含1条记录,此时调用max(total)计算的就是当前分组单条记录的total值,最终自然会返回所有设施的总预订量,无法筛选出最大值。
正确实现方案
方案1:无需处理并列最高的场景
直接对总预订量降序排序后取第一条即可:
select facid, sum(slots) as total from cd.bookings group by facid order by total desc limit 1;
方案2:需处理并列最高的场景
如果存在多个设施预订量同为最高的情况,需要先计算出最大总预订量,再匹配对应记录:
with fac_total as ( select facid, sum(slots) as total from cd.bookings group by facid ) select facid, total from fac_total where total = (select max(total) from fac_total);
内容的提问来源于stack exchange,提问作者Tapan Das
相关产品推荐
相关产品推荐

