理解 SQL 的 GROUP BY 子句和聚合函数
使用 SQL 的 GROUP BY
子句通常会导致对分组后可访问哪些属性感到困惑。让我们澄清一下:
GROUP BY
和非聚合列
分组后尝试访问非聚合列会导致“不是 GROUP BY 表达式”错误。这是因为每个组可能包含多行,并且非聚合列中的值在这些行之间会有所不同。
聚合函数:深入了解
相反,聚合函数(如 SUM
、MAX
、AVG
等)即使在应用 GROUP BY
后也可以访问每个组内的基础列。 他们计算整个组的单个汇总值。
示例:
考虑这个查询:
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no;</code>
此查询将失败,因为它尝试选择所有列,而不在非聚合列上使用聚合函数,例如 order_price
.
但是,这是一个有效的查询:
<code class="language-sql">SELECT SUM(order_price) FROM order_details GROUP BY order_no;</code>
在这里,SUM
处理每个组,对 order_price
值进行求和,得出每个 order_no
的总价格。
在 GROUP BY
要在分组后访问非聚合列,请将它们包含在 GROUP BY
子句中:
<code class="language-sql">SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no;</code>
这会正确检索每个 order_no
及其总数 order_price
。
以上是在 SQL 中使用聚合函数时如何避免'not a GROUP BY expression”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!