【问题标题】:How does GROUP BY work?GROUP BY 是如何工作的?
【发布时间】:2011-11-18 01:52:39
【问题描述】:

假设我有一个带有属性的表 Tab1 - a1a2、... 等等。没有一个属性是唯一的。

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

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

【问题讨论】:

  • 每个 a1 和 a2 的唯一组合(或组)将返回一行。如果只有一个独特的组合,您只会得到一行。
  • 总和会告诉你每组有多少行 =)

标签: sql oracle


【解决方案1】:

类似地,而不是技术上,为了记住它的逻辑,可以认为每个具有一些行的分组字段放在不同的表中,然后聚合函数单独进行表。


Ben Forta 醒目地陈述了以下说法。

GROUP BY 子句指示 DBMS 对数据进行分组,然后 对每个组执行the aggregate (function),而不是对整个结果执行 设置。

除了聚合计算语句之外,SELECT 语句中的每一列都必须出现在 GROUP BY 子句中。

GROUP BY 子句必须出现在任何WHERE 子句和之前任何ORDER BY 子句。

我想起他的话的理解如下。

DISTINCT关键字一样,通过GROUP BY指定的每个字段都是 认为在一天结束时被分组并变得独一无二。这 对每个组执行聚合函数,就像发生在 SuL's answer.

【讨论】:

  • Aside from the aggregate calculation statements, every column in your SELECT statement must be present in the GROUP BY clause. 对面不是更接近事实吗?我认为GROUP BY 语句中的每一列都应该在SELECT 中聚合?
  • @Yuras 没错。 SELECT 中的字段必须在 GROUP BY 中,反之则不然。请查看以下链接,stackoverflow.com/a/11837318/4990642stackoverflow.com/a/38707811/4990642
【解决方案2】:

GROUP BY 将所有相同的记录分组。

SELECT COUNT(ItemID), City
FROM Orders
GROUP BY City;

----------------------------------------
13  Sacrmento
23  Dallas
87  Los Angeles
5   Phoenix

如果您不按City 分组,它只会显示ItemID 的总数。

【讨论】:

    【解决方案3】:

    GROUP BYGROUP BY 子句中的每个唯一字段组合返回一行。要确保只有一行,您必须使用聚合函数 - COUNTSUMMAX - 没有 GROUP BY 子句。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-24
        相关资源
        最近更新 更多