首页 > 数据库 > mysql教程 > SQL 的 GROUP BY 子句在没有聚合函数的情况下如何工作?

SQL 的 GROUP BY 子句在没有聚合函数的情况下如何工作?

DDD
发布: 2024-12-25 22:29:09
原创
1003 人浏览过

How Does SQL's GROUP BY Clause Work Without Aggregate Functions?

了解没有聚合函数的 GROUP BY

在 SQL 中,GROUP BY 语句用于根据指定列对表中的行进行分组。在不使用聚合函数的情况下使用 GROUP BY 时,了解它的操作方式及其所需的条件非常重要。

考虑以下示例:

SELECT ename, sal
FROM emp
GROUP BY ename, sal;
登录后复制

此查询不会返回任何行,因为它违反了没有聚合函数的 GROUP BY 的规则:

  • Number of Columns in SELECT 列表: SELECT 列表中的列数必须等于 GROUP BY 子句中的列数。

在这种情况下,SELECT 列表有两列(ename、sal) ,但 GROUP BY 子句有三个(ename、sal、sal)。要更正此问题,请从 GROUP BY 子句中删除一个 sal 列:

SELECT ename, sal
FROM emp
GROUP BY ename;
登录后复制
  • SELECT 列表中的非 GROUP BY 列: 只能包含非 GROUP BY 列如果它们是常量或作为聚合参数出现,则在 SELECT 列表中

当您在 SELECT 列表中包含 sal 时,它会成为非 GROUP BY 列,因为它不在 GROUP BY 子句中。由于它不是聚合函数,因此会触发 ORA-00979 错误。

纠正此问题需要将 sal 添加到 GROUP BY 子句或在其上使用聚合函数:

-- Add sal to the GROUP BY clause
SELECT ename, MIN(sal), MAX(sal)
FROM emp
GROUP BY ename, sal;

-- Use an aggregate function on sal
SELECT ename, SUM(sal)
FROM emp
GROUP BY ename;
登录后复制

规则背后的推理

GROUP BY 操作合并GROUP BY 列中具有相同值的行,为每个唯一的值集生成一行。在没有聚合函数的 SELECT 列表中包含非 GROUP BY 列会产生歧义,因为不清楚如何为每个组选择代表值。

例如,如果您有一个包含 Name 和 Age 列的表,并且您 GROUP BY Name,每个名字的结果中应显示哪个年龄?通过使用 MIN、MAX 或 SUM 等聚合函数,您可以明确指定如何处理此类列。

以上是SQL 的 GROUP BY 子句在没有聚合函数的情况下如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!

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