我很难理解这个查询在做什么:
SELECT branch_name, count(distinct customer_name)
FROM depositor, account
WHERE depositor.account_number = account.account_number
GROUP BY branch_name
GROUP BY有什么需要?
答案 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错误,或其他人的无意义结果。
答案 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_name
与SUMMARIZE..BY { branch_name }
的做法相同。由于SQL具有非常严格的结构,因此必须在branch_name
子句中重复SELECT
列。