我竭力要了解此查询正在做的目的:我不知道什么是“按组”在这里
SELECT branch_name, count(distinct customer_name)
FROM depositor, account
WHERE depositor.account_number = account.account_number
GROUP BY branch_name
什么是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的需要?
让我们一步从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_name
与SUMMARIZE..BY { branch_name }
的做法相同。由于SQL具有非常严格的结构,因此必须在SELECT
子句中重复使用branch_name
列。
您必须以这种方式使用像COUNT
集合函数(使用集合函数对应于一个或多个值表中汇总数据)使用GROUP BY
。
查询本质上选择不同的branch_name
s使用该列作为分组列,然后在该组内计数不同的customer_name
s。
你不能使用COUNT
,让每branch_name
不同customer_name
S的数量没有GROUP BY
条款(至少不是一个简单的查询规范 - 你可以使用其他手段,连接,子查询等)。
它给你每个分支的总客户; 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
如果你想COUNT
东西(见语句SELECT
- 第一部分),你必须为了告诉汇总一下查询使用GROUP BY
。 GROUP BY
语句与聚合函数一起使用,可将结果集按一个或多个列分组。
忽视它会导致大多数RDBMS中的SQL错误,或者导致其他错误的结果。
+1因为你的回答非常清楚(比我的更多)! – Marco
确实可以使用没有“GROUP BY”的聚合函数,例如'SELECT count(distinct customer_name)FROM depositor,account WHERE depositor.account_number = account.account_number;' – onedaywhen
@onedaywhen - Fair point。答复修正。 – Oded