如何编写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
相关产品推荐
相关产品推荐

