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

如何编写SQL查询获取拥有至少5辆3周内创建车辆的司机ID?

解决方法:获取拥有至少5辆近3周新增车辆的司机ID

方法一:使用GROUP BY + HAVING(推荐,更高效)

这是最直接的实现方式,通过分组统计每个司机符合条件的车辆数量,再过滤出数量≥5的记录:

SELECT d.id
FROM drivers d
JOIN cars c ON c.driver_id = d.id
WHERE c.created_at >= NOW() - '3 weeks'::INTERVAL
GROUP BY d.id
HAVING COUNT(c.id) >= 5;
  • 不需要DISTINCT,因为GROUP BY d.id已经确保每个司机ID只出现一次
  • HAVING子句在分组后过滤,只保留统计车辆数≥5的司机

方法二:子查询实现(匹配你最初的思路)

补全你伪代码中的子查询部分,先筛选出符合条件的司机ID集合,再在主查询中匹配:

SELECT DISTINCT d.id
FROM drivers d
JOIN cars c ON c.driver_id = d.id
WHERE c.created_at >= NOW() - '3 weeks'::INTERVAL
AND d.id IN (
    SELECT driver_id
    FROM cars
    WHERE created_at >= NOW() - '3 weeks'::INTERVAL
    GROUP BY driver_id
    HAVING COUNT(id) >= 5
);

Rails中调用原生SQL

在Driver模型里可以封装成类方法,方便调用:

class Driver < ApplicationRecord
  def self.with_at_least_5_recent_cars
    find_by_sql(<<-SQL)
      SELECT d.id
      FROM drivers d
      JOIN cars c ON c.driver_id = d.id
      WHERE c.created_at >= NOW() - '3 weeks'::INTERVAL
      GROUP BY d.id
      HAVING COUNT(c.id) >= 5
    SQL
  end
end

调用时直接用Driver.with_at_least_5_recent_cars即可获取符合条件的司机记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:26:08