2011-10-13 69 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

相關問題