我不确定这里“分组”的目的是什么

时间:2011-10-13 06:34:42

标签: sql group-by

我很难理解这个查询在做什么:

SELECT branch_name, count(distinct customer_name)
FROM depositor, account
WHERE depositor.account_number = account.account_number
GROUP BY branch_name

GROUP BY有什么需要?

4 个答案:

答案 0 :(得分:6)

您必须使用GROUP BY才能以这种方式使用COUNT这样的聚合函数(使用聚合函数来聚合对应于一个或多个的数据)表)。

查询实际上选择使用该列作为分组列的不同branch_name,然后在组内计算不同的customer_name

在没有COUNT子句的情况下,您无法使用customer_name获取每branch_name个不同GROUP BY的数量(至少没有简单的查询规范 - 您可以使用其他方法,连接,子查询等...)。

答案 1 :(得分:3)

它为每个分支机构提供了完全不同的客户; GROUP BY用于对COUNT功能进行分组 它也可以写成:

SELECT branch_name, count(distinct customer_name)
FROM depositor INNER JOIN account
ON depositor.account_number = account.account_number
GROUP BY branch_name

答案 2 :(得分:2)

如果您想要COUNT某些内容(请参阅SELECT - 声明的一部分),您必须使用GROUP BY来告诉查询要汇总的内容。 GROUP BY语句与聚合函数结合使用,以按一列或多列对结果集进行分组。

忽略它会导致大多数RDBMS中的SQL错误,或其他人的无意义结果。

有用的链接: http://www.w3schools.com/sql/sql_groupby.asp

答案 3 :(得分:2)

让我们看一下关系式跟踪语言Tutorial D,暂时离开SQL。

因为两个关系(表)在公共属性(列)名称account_number上连接,所以我们可以使用自然连接:

depositor JOIN account

(因为结果是一个关系,根据定义只有不同的元组(行),我们不需要DISTINCT关键字。)

现在我们只需要使用SUMMARIZE..BY进行汇总:

SUMMARIZE (depositor JOIN account) 
   BY { branch_name } 
      ADD ( COUNT ( customer_name ) AS customer_tally )

回到SQLland,GROUP BY branch_nameSUMMARIZE..BY { branch_name }的做法相同。由于SQL具有非常严格的结构,因此必须在branch_name子句中重复SELECT列。