GROUP BY如何运作?

时间:2011-09-15 16:59:26

标签: sql oracle

假设我有一个包含属性的表Tab1 - a1a2,...等。这些属性都不是唯一的。

以下查询的性质是什么?它会一直返回一行吗?

SELECT a1, a2, sum(a3) FROM Tab1 GROUP BY a1, a2

4 个答案:

答案 0 :(得分:57)

GROUP BYGROUP BY字段的每个唯一组合返回一行。因此,在您的示例中,(a1, a2)行中出现的Tab1的每个不同组合都会在查询中生成一行,表示具有逐个字段值的给定组合的行组。像SUM()这样的聚合函数是通过每个组的成员计算的。

答案 1 :(得分:13)

GROUP BYGROUP BY子句中的每个唯一字段组合返回一行。要确保只有一行,您必须使用汇总函数 - COUNTSUMMAX - 没有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