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

使用GROUP BY时如何对不在SELECT列表中的列执行ORDER BY排序?

错误原因

SQLCODE=-854是严格SQL模式下的列引用校验错误:将IDKartoch从SELECT子句移除后,该列既不在最终返回的字段列表中,也未被聚合函数包裹,按照ANSI SQL标准,ORDER BY子句不能引用这类不在结果集范围内的列,因此抛出无效引用错误。
最初的SQL可在低版本MySQL运行,是因为低版本MySQL默认未开启ONLY_FULL_GROUP_BY严格校验,属于非标准兼容的宽松行为,不具备跨数据库、跨版本通用性。

正确实现方案

根据实际业务需求二选一即可:

  • 方案1:需要保留按IDKartoch分组排序的逻辑,且最终结果不展示IDKartoch字段
    用子查询先完成分组、过滤、排序逻辑,外层只提取需要的Total字段即可:
SELECT Total
FROM (
    SELECT
        IDKartoch,
        SUM(SummOpl) AS Total
    FROM
        Oplata
    GROUP BY 
        IDKartoch
    HAVING
        SUM(SummOpl) >= 0
    ORDER BY
        IDKartoch
) AS res;
  • 方案2:不需要按IDKartoch排序,仅修改SELECT字段时遗漏调整ORDER BY
    直接移除ORDER BY中无效的IDKartoch引用,可根据需要改为按返回的聚合字段排序,例如按合计值升序排列:
SELECT
    SUM(SummOpl) AS Total
FROM
    Oplata
GROUP BY
    IDKartoch 
HAVING
    SUM(SummOpl) >= 0
ORDER BY
    Total ASC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:18:32