首页 > 数据库 > mysql教程 > 为什么SQL查询中会出现'列必须出现在GROUP BY子句中或在聚合函数中使用”的情况?

为什么SQL查询中会出现'列必须出现在GROUP BY子句中或在聚合函数中使用”的情况?

Patricia Arquette
发布: 2025-01-18 14:01:09
原创
469 人浏览过

Why Does

SQL 错误:列必须出现在 GROUP BY 子句中或用作聚合函数

在执行分组聚合查询时,必须确保所选列要么出现在 GROUP BY 子句中,要么参与聚合函数的计算。否则,将会出现类似“列必须出现在 GROUP BY 子句中或用作聚合函数”的错误信息。

问题描述

假设有一个名为 makerar 的表,包含 cnamewmnameavg 等列。目标是为每个不同的 cname 获取最大的 avg 值。但是,执行以下查询:

<code class="language-sql">SELECT cname, wmname, MAX(avg)  FROM makerar GROUP BY cname;</code>
登录后复制

将会报错,因为 wmname 列既没有包含在 GROUP BY 子句中,也没有用作聚合函数。

解决方案

解决此问题主要有两种方法:

1. 子查询和连接方法

此方法使用子查询计算每个 cname 的最大 avg 值,然后将子查询与主表连接,以检索相应的 wmname

<code class="language-sql">SELECT m.cname, m.wmname, t.mx
FROM (
    SELECT cname, MAX(avg) AS mx
    FROM makerar
    GROUP BY cname
    ) t JOIN makerar m ON m.cname = t.cname AND t.mx = m.avg
;</code>
登录后复制

2. 窗口函数方法

窗口函数提供了一种更简单的替代方法,可以在组内执行聚合计算:

<code class="language-sql">SELECT cname, wmname, MAX(avg) OVER (PARTITION BY cname) AS mx
FROM makerar
;</code>
登录后复制

注意:虽然窗口函数可以正确显示每个 cname 的最大 avg 值,但可能会导致重复记录。

以上是为什么SQL查询中会出现'列必须出现在GROUP BY子句中或在聚合函数中使用”的情况?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板