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

使用GROUP BY分组查询时如何在结果中包含更多非分组列信息

报错原因

当使用GROUP BY进行分组聚合时,SELECT返回的字段只能是以下两类:

  • 包含在GROUP BY子句中的分组字段
  • 被SUM/MAX/COUNT等聚合函数包裹的计算字段
    你原SQL仅按年、月、日三个字段分组,但SELECT中还返回了origin、dest、flight三个既不在分组字段中、也没有被聚合函数处理的字段,违反了SQL聚合语法规则,因此触发报错。
正确实现方案

你补充的窗口函数写法完全可以满足需求,核心逻辑是通过分区窗口函数替代GROUP BY聚合,避免分组后丢失航班详情字段,也可以用排名函数简化写法,代码如下:

select * from (
    select 
        *,
        round(distance / nullif(air_time, 0) * 60, 2) as speed,
        -- 按日期分区,按飞行速度倒序排名
        rank() over(partition by year, month, day order by distance / nullif(air_time, 0) * 60 desc) as speed_rk
    from flights
) t
where speed_rk = 1;

注:如果单日存在多个航班速度同为最大值,以上写法会返回所有符合条件的航班,符合常规业务需求。

避坑提示

不要直接把origin、dest、flight字段添加到GROUP BY子句中,这种写法会将分组粒度缩小到单个航班维度,最终得到的是每个航班的飞行速度,而不是每日的最大飞行速度对应的航班信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:57:01