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

如何用SQL查询酒驾司机占比高于均值20个百分点的州?

你的SQL查询分析与优化建议

你的查询逻辑是完全可行的,它等价于筛选出percent_alcohol_impaired大于所有州平均酒驾占比+20个百分点的记录,通过数学移项后逻辑完全成立,能够得到你需要的结果。

更优的查询方式

当表数据量较大时,你的原查询会对playground.bad_drivers表进行两次扫描(一次子查询计算平均值,一次主查询筛选数据)。可以使用窗口函数AVG() OVER()减少一次表扫描,提升查询效率:

SELECT state, percent_alcohol_impaired
FROM (
    SELECT 
        state, 
        percent_alcohol_impaired,
        AVG(percent_alcohol_impaired) OVER() AS avg_alcohol_impaired
    FROM playground.bad_drivers
) AS sub
WHERE percent_alcohol_impaired > avg_alcohol_impaired + 20
LIMIT 100;

如果追求代码可读性,也可以用CTE(公共表表达式)改写,逻辑和上面的子查询完全一致:

WITH driver_stats AS (
    SELECT 
        state, 
        percent_alcohol_impaired,
        AVG(percent_alcohol_impaired) OVER() AS avg_alcohol_impaired
    FROM playground.bad_drivers
)
SELECT state, percent_alcohol_impaired
FROM driver_stats
WHERE percent_alcohol_impaired > avg_alcohol_impaired + 20
LIMIT 100;

总结

你的原查询逻辑正确,能够得到预期结果;窗口函数/CTE版本只需要扫描一次表,在大数据量场景下性能更优,同时代码结构也更清晰。

内容的提问来源于stack exchange,提问作者dz1981-bit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:19:59