如何用SELECT语句查询bookingxx表中预订次数最多的客户姓名
实现查询预订次数最多的客户姓名的SQL方案
你之前用GROUP BY没有得到正确结果,大概率是分组条件设置错误,或者没有配套的最大值匹配逻辑,以下是两种可直接运行的实现方案:
通用SQL写法(兼容所有主流数据库)
SELECT BookingFirstname AS 名, BookingLastname AS 姓 FROM bookingxx GROUP BY BookingFirstname, BookingLastname HAVING COUNT(*) = ( SELECT MAX(booking_cnt) FROM ( SELECT COUNT(*) AS booking_cnt FROM bookingxx GROUP BY BookingFirstname, BookingLastname ) AS cnt_table );
窗口函数写法(适用MySQL8.0+/PostgreSQL/SQL Server等支持CTE和窗口函数的数据库)
WITH user_booking_cnt AS ( SELECT BookingFirstname AS 名, BookingLastname AS 姓, COUNT(*) AS booking_cnt, RANK() OVER(ORDER BY COUNT(*) DESC) AS rk FROM bookingxx GROUP BY BookingFirstname, BookingLastname ) SELECT 名, 姓 FROM user_booking_cnt WHERE rk = 1;
逻辑说明
- 首先以姓名组合作为分组维度,统计每个客户的预订总次数
- 两种写法都支持返回并列第一的所有客户,不会出现同次数只返回一个的问题
- 你提供的测试数据中所有客户都仅有1次预订,执行SQL会返回全部10条客户记录,可自行添加重复客户的预订数据验证逻辑
内容的提问来源于stack exchange,提问作者Hany
相关产品推荐
相关产品推荐

