如何使用SQL查询配送单量最高的3名骑手姓名及对应单量
问题原因
- JOIN语句缺少关联条件,没有将子查询统计的骑手ID和用户表的用户ID做匹配,导致子查询的统计结果和用户表生成笛卡尔积,所有用户都会匹配到全部配送量统计数据
- 多余的
MAX()聚合和用户姓名字段分组逻辑,导致所有用户行都返回了全表最大配送量,和骑手本人的实际配送数据无关联 - 没有按配送量排序、取前3的过滤逻辑,无法筛选出配送单量最高的3名骑手
修正后的代码(以MySQL/PostgreSQL为例)
SELECT u.first_name, u.last_name, alias.d AS deliveries FROM ( SELECT o.rider_id, COUNT(o.rider_id) d FROM orders o GROUP BY o.rider_id ) AS alias -- 这里默认users表主键为id,可根据实际表结构调整关联字段 JOIN users u ON alias.rider_id = u.id -- 按配送量从高到低排序 ORDER BY alias.d DESC -- 取前3名 LIMIT 3;
其他数据库适配说明
- 如果使用SQL Server数据库,去掉语句末尾的
LIMIT 3,将开头的SELECT修改为SELECT TOP 3即可 - 如果使用Oracle数据库,在语句末尾追加
FETCH FIRST 3 ROWS ONLY即可
内容的提问来源于stack exchange,提问作者BohPomozet
相关产品推荐
相关产品推荐

