了解没有聚合函数的 GROUP BY
在 SQL 中,GROUP BY 语句用于根据指定列对表中的行进行分组。在不使用聚合函数的情况下使用 GROUP BY 时,了解它的操作方式及其所需的条件非常重要。
考虑以下示例:
SELECT ename, sal FROM emp GROUP BY ename, sal;
此查询不会返回任何行,因为它违反了没有聚合函数的 GROUP BY 的规则:
在这种情况下,SELECT 列表有两列(ename、sal) ,但 GROUP BY 子句有三个(ename、sal、sal)。要更正此问题,请从 GROUP BY 子句中删除一个 sal 列:
SELECT ename, sal FROM emp GROUP BY ename;
当您在 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中文网其他相关文章!