如何编写统计类SQL查询,找出驾驶超过两辆汽车的司机?
解决方案
要找出驾驶超过两辆汽车的司机,可根据需求分两种场景处理:
场景1:统计司机所有驾驶过的车型(含不在Car表中的车型)
直接对Driver表按driver_id分组,统计每个司机的车型数量,再筛选数量大于2的记录:
SELECT driver_id FROM Driver GROUP BY driver_id HAVING COUNT(DISTINCT car_type) > 2;
执行后会返回driver_id为1和2的司机——司机1驾驶了3种车型,司机2也驾驶了3种车型,均满足条件。
场景2:仅统计Car表中登记过的车型
如果只需要统计Car表中存在的合规车型,需先关联两张表再统计:
SELECT d.driver_id FROM Driver d JOIN Car c ON d.car_type = c.car_name GROUP BY d.driver_id HAVING COUNT(DISTINCT c.car_name) > 2;
这个查询仅返回driver_id为1的司机,因为司机2驾驶的Cheverolet和Tata不在Car表中,有效合规车型仅1种,不满足条件。
补充说明
- 使用
COUNT(DISTINCT car_type)是为了规避同一司机重复记录同一车型的情况,若能确定Driver表中每个司机的每个车型仅存一条记录,也可替换为COUNT(*),但COUNT(DISTINCT)的逻辑更严谨。 - 必须用
HAVING子句做分组后的筛选,不能用WHERE——WHERE仅能在分组前筛选行,无法处理分组后的统计结果。
内容的提问来源于stack exchange,提问作者Ravi Ravee
相关产品推荐
相关产品推荐

