2011-10-13 70 views
0

我竭力要了解此查询正在做的目的:我不知道什么是“按组”在这里

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

什么是GROUP BY的需要?

回答

2

让我们一步从SQL走了一会儿,在看的关系trainging语言Tutorial D

因为这两个关系(表)都在共同的属性(列)名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具有非常严格的结构,因此必须在SELECT子句中重复使用branch_name列。

6

您必须以这种方式使用像COUNT集合函数(使用集合函数对应于一个或多个表中汇总数据)使用GROUP BY

查询本质上选择不同的branch_name s使用该列作为分组列,然后在该组内计数不同的customer_name s。

你不能使用COUNT,让每branch_name不同customer_name S的数量没有GROUP BY条款(至少不是一个简单的查询规范 - 你可以使用其他手段,连接,子查询等)。

+1

+1因为你的回答非常清楚(比我的更多)! – Marco

+0

确实可以使用没有“GROUP BY”的聚合函数,例如'SELECT count(distinct customer_name)FROM depositor,account WHERE depositor.account_number = account.account_number;' – onedaywhen

+0

@onedaywhen - Fair point。答复修正。 – Oded

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

如果你想COUNT东西(见语句SELECT - 第一部分),你必须为了告诉汇总一下查询使用GROUP BYGROUP BY语句与聚合函数一起使用,可将结果集按一个或多个列分组。

忽视它会导致大多数RDBMS中的SQL错误,或者导致其他错误的结果。

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

相关问题