如何查询拥有最多remote类型订单的所有地区名称(无需LIMIT)
解决获取并列最多远程订单地区的SQL问题
现有orders表,包含name(地区名称)和type字段,type的取值为'remote'或'in-person'。需要获取拥有最多'remote'类型订单的地区名称。
原SQL语句仅能返回唯一的最大订单数地区:
SELECT name, COUNT(order_id) as remote_count FROM orders WHERE type = 'remote' GROUP BY name ORDER BY remote_count DESC LIMIT 1
现在需要实现支持多个地区并列最大值的查询,且不能使用LIMIT,以下是两种可行方案:
方案一:子查询匹配最大订单数
先统计各地区的远程订单数,再筛选出订单数等于全局最大值的记录:
SELECT name, remote_count FROM ( SELECT name, COUNT(order_id) AS remote_count FROM orders WHERE type = 'remote' GROUP BY name ) AS region_remote_counts WHERE remote_count = ( SELECT MAX(rc) FROM ( SELECT COUNT(order_id) AS rc FROM orders WHERE type = 'remote' GROUP BY name ) AS counts );
方案二:窗口函数(更简洁)
使用DENSE_RANK()窗口函数对订单数排名,直接筛选排名为1的地区(并列最大值会共享排名1):
SELECT name, remote_count FROM ( SELECT name, COUNT(order_id) AS remote_count, DENSE_RANK() OVER(ORDER BY COUNT(order_id) DESC) AS rnk FROM orders WHERE type = 'remote' GROUP BY name ) AS ranked_regions WHERE rnk = 1;
内容的提问来源于stack exchange,提问作者wafflehouse67
相关产品推荐
相关产品推荐

