2013-02-18 136 views
0

新SQL'er在這裏。好的一個學校作業我決定在問題中構建表格,以便我可以測試我的查詢是否正確。SQL查詢失敗

其中一個問題是簡單地顯示共享同一辦公室的所有員工。易我覺得

SELECT office, name 
FROM my_db.employee 
GROUP BY office; 

但是當我運行這一點,只返回每一個獨特的辦公室並不是所有的辦公室分組的第一個元組。

我的邏輯有問題嗎?

回答

0

SELECT部分​​中的所有內容必須出現在GROUP BY部分中,聚合字段除外。也就是說,您正在選擇「辦公室,名稱」,但只能通過「辦公室」進行分組。你需要按「辦公室,名稱」進行分組。

1

您可以僅選擇在group by語句,或者使用聚合函數列(求和,計數等)

所以,

select office, count(name) from my_db.employee group by office; 

會的工作,但它不是什麼你當然想要。

你可能想那樣簡單

select office, name from my_db.employee order by office 

這將讓他們的辦公室「分組」的東西。 GROUP BY要求SQL只爲每個GROUP BY變量發出一行 - 這不是「分組」,因爲您的任務提出了這個意思,我認爲。

+0

完美,感謝您對GROUP BY查詢的解釋! – 2013-02-18 16:50:27

0

由於您可以直觀地檢查行以查看誰在辦公室,或者使用MySQL以外的語言非常簡單地進行聚合,所以您收到的問題對於如何呈現數據有點不清楚。也許他想要這樣的事情?

SELECT 
    office, GROUP_CONCAT(name) 
FROM 
    my_db.employee 
GROUP BY 
    office 
+0

非常感謝所有的迴應。偉大的董事會獲得幫助。我現在看到爲什麼GROUP BY沒有做我認爲應該做的事情。 – 2013-02-18 16:49:14

1

作爲一個新手到SQL,你需要學會區分上被問什麼......

我想誰的辦公室「X」(工作的所有的人使用WHERE子句 - 您對此感興趣的辦公室='X')

我想知道爲每個辦公室工作的多少(使用GROUP BY子句,幷包含所有「分組依據」字段)。

Group By與您想共同執行的某些列上的聚合相關聯。經銷商有多少輛汽車銷售。每輛車每月銷售多少輛汽車?

當進行聚合時,這些通常與MIN(),MAX(),SUM(),AVG()等相關聯,並且許多引擎中的group需要您列出所有非聚合字段以進行分組。

Explosion Pills'的答案可能與您想要的最接近,並且是非數字或可比較的集合函數(例如min(),max())的例外。 Group_Concat()告訴引擎只要依次構建一個字符串列表,只要它們都處於相同的「組」分類(例如您的Office)範例中即可。

祝你的教育好運,並且在這裏有很多人可以幫忙。

+0

感謝您的詳細解釋!我有一種感覺,我一定是錯誤地使用了GROUP BY。很高興能夠清楚地闡明它。回到閱讀我的課堂筆記! – 2013-02-18 16:51:34