Sql 分组是如何工作的?
假设我有一个带有属性的表Sql 分组是如何工作的?,sql,oracle,Sql,Oracle,假设我有一个带有属性的表Tab1,a2。。。等等。所有属性都不是唯一的 以下查询的性质是什么?它总是返回一行吗 SELECT a1, a2, sum(a3) FROM Tab1 GROUP BY a1, a2 groupby为groupby子句中每个字段的唯一组合返回一行。要确保只有一行,必须使用聚合函数-COUNT、SUM、MAX,而不使用GROUP BY子句。GROUP BY为GROUP BY字段的每个唯一组合返回一行。因此,在您的示例中,(a1,a2)在Tab1的行中出现的每个不同组合都
Tab1
,a2
。。。等等。所有属性都不是唯一的
以下查询的性质是什么?它总是返回一行吗
SELECT a1, a2, sum(a3) FROM Tab1 GROUP BY a1, a2
groupby
为groupby
子句中每个字段的唯一组合返回一行。要确保只有一行,必须使用聚合函数-COUNT
、SUM
、MAX
,而不使用GROUP BY
子句。GROUP BY
为GROUP BY
字段的每个唯一组合返回一行。因此,在您的示例中,(a1,a2)
在Tab1
的行中出现的每个不同组合都会导致查询中的一行,该行表示具有给定分组字段值组合的行组。聚合函数(如SUM()
)在每个组的成员上进行计算。按组对所有相同的记录进行分组
SELECT COUNT(ItemID), City
FROM Orders
GROUP BY City;
----------------------------------------
13 Sacrmento
23 Dallas
87 Los Angeles
5 Phoenix
如果不按城市
分组,它只会以类似方式显示ItemID
的总计数,而不是从技术上讲,为了记住其逻辑,可以认为每个分组字段(具有一些行)都放在不同的表中,然后聚合函数分别执行这些表
明显地陈述了下面的说法
groupby
子句指示DBMS对数据进行分组,然后
对每组执行,而不是对整个结果执行
设定
除了聚合计算语句外,SELECT
语句中的每一列都必须出现在GROUP BY
子句中
GROUP BY
子句必须位于任何WHERE
子句之后和任何ORDER BY
子句之前
我的理解让人想起他的话如下
与不同的
关键字一样,通过groupby
指定的每个字段都是
在一天结束时被认为是分组的,并且是独一无二的。这个
聚合函数在每个组上执行,如中所述
它将为a1和a2的每个唯一组合(或组)返回一行。如果只有一个唯一的组合,您只能得到一行。总和将告诉您每个组中有多少行结束=)除了聚合计算语句之外,SELECT语句中的每一列都必须出现在group BY子句中。
相反的说法是否更接近事实?我认为groupby
语句中的每一列都应该在SELECT
?@Yuras中聚合。没错,SELECT中的字段必须在groupby中,但反之亦然。请浏览以下链接,以及