我竭力要了解此查詢正在做的目的:我不知道什麼是「按組」在這裏
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