MySQL查询问题:统计event_booking表各场地预约数子查询出错如何解决
现有查询的逻辑问题
- 未对场地做分组去重:你的查询直接从
event_booking全表读取数据,没有聚合逻辑,每一条预约记录都会生成一行结果,最终会出现大量重复的场地+计数数据,而非每个场地仅输出一条统计结果。 - 逻辑冗余:你用到的嵌套子查询、IN子句的分组过滤都是不必要的写法,反而增加了查询性能开销。
正确的查询写法
直接用GROUP BY对booking_location字段聚合,搭配COUNT统计每个分组的记录数即可:
SELECT booking_location, COUNT(*) AS no_bookings FROM event_booking GROUP BY booking_location;
这条语句会自动将相同booking_location的记录合并为一个分组,COUNT(*)会统计每个分组内的总记录数,最终每个场地仅输出一行统计结果,完全匹配你的需求。
如果需要按预约数量从高到低排序,和你给出的预期输出顺序一致,可以再加排序规则:
SELECT booking_location, COUNT(*) AS no_bookings FROM event_booking GROUP BY booking_location ORDER BY no_bookings DESC;
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

