假设我有一个包含属性的表Tab1
- a1
,a2
,...等。这些属性都不是唯一的。
以下查询的性质是什么?它会一直返回一行吗?
SELECT a1, a2, sum(a3) FROM Tab1 GROUP BY a1, a2
答案 0 :(得分:57)
GROUP BY
为GROUP BY
字段的每个唯一组合返回一行。因此,在您的示例中,(a1, a2)
行中出现的Tab1
的每个不同组合都会在查询中生成一行,表示具有逐个字段值的给定组合的行组。像SUM()
这样的聚合函数是通过每个组的成员计算的。
答案 1 :(得分:13)
GROUP BY
为GROUP BY
子句中的每个唯一字段组合返回一行。要确保只有一行,您必须使用汇总函数 - COUNT
,SUM
,MAX
- 没有GROUP BY
子句。
答案 2 :(得分:6)
GROUP BY
将所有相同的记录分组。
SELECT COUNT(ItemID), City
FROM Orders
GROUP BY City;
----------------------------------------
13 Sacrmento
23 Dallas
87 Los Angeles
5 Phoenix
如果您不按City
进行分组,则只会显示ItemID
的总数。
答案 3 :(得分:0)
Ben Forta引人注目的是以下话。
GROUP BY
子句指示DBMS对数据进行分组,然后 对每个组而不是对整个结果执行the aggregate (function) 设置。除了聚合计算语句外,
SELECT
语句中的每一列都必须出现在GROUP BY
子句中。
GROUP BY
子句必须出现在任何WHERE
子句之后,并且在任何ORDER BY
子句之前。
我的理解使他想起了他的话。
与
DISTINCT
关键字一样,通过GROUP BY
指定的每个字段为 归根结底并在一天中变得独特。的 汇总功能是对每个组执行的 SuL's answer。