You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询指定月份乘机次数超5次的乘客信息,现有SQL执行结果不符合预期

SQL语句问题排查与修正

原有语句错误原因

  • HAVING 子句必须配合 GROUP BY 分组语句使用才能实现按单用户统计乘机次数,未分组的情况下 count(pass_id) 会直接统计所有符合筛选条件的记录总条数,无法判断单个用户的乘机次数是否达标。
  • 内层子查询仅筛选出了10月有乘机记录的乘客ID,没有做次数统计,外层逻辑无法拿到单用户的乘机次数数据。

正确实现写法

写法1:子查询过滤符合条件的乘客ID

SELECT * FROM passengers 
WHERE pass_id IN (
    SELECT pass_id FROM flights
    WHERE f_date BETWEEN '2020-10-01' AND '2020-10-31'
    GROUP BY pass_id
    HAVING COUNT(*) > 5
);

写法2:关联查询(数据量较大时性能更优)

SELECT p.* 
FROM passengers p
INNER JOIN (
    SELECT pass_id FROM flights
    WHERE f_date BETWEEN '2020-10-01' AND '2020-10-31'
    GROUP BY pass_id
    HAVING COUNT(*) > 5
) f ON p.pass_id = f.pass_id;

额外提示

日期参数建议写全两位的日/月数值,'2020-10-01' 比 '2020-10-1' 在不同数据库中的兼容性更好,避免出现日期识别异常。


内容的提问来源于stack exchange,提问作者Citric101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:24:04