group by語句

突然看到這個問題,腦袋一蒙,不知道啥意思,後來想想,試圖把select裏的選項放到後面,問題自然解決!
 
下面這個就是報“在選擇列表中無效,因爲該列既不包含在聚合函數中,也不包含在GROUP BY 子句”問題語句
select shipcountry,sum(shipvia) as totalvia,OrderDate asthefirsttime from orders group by shipcountry
 
下面是通過的,請注意orderdate
select shipcountry,sum(shipvia) as totalvia,OrderDate asthefirsttime from orders group by shipcountry,orderdate
 
 
相應的從網上看到其他的朋友也有這樣的問題

比如要顯示authors表中的au_fname,au_lname,zip,city,state信息,並且按city分組(相同city的排列在一起)

錯誤的表達:
select au_fname,au_lname,zip, city,state
from authors
group by city

就會出現:服務器: 消息 8120,級別 16,狀態 1,行 1
列 'authors.au_fname'在選擇列表中無效,因爲該列既不包含在聚合函數中,也不包含在 GROUP BY子句中。
服務器: 消息 8120,級別 16,狀態 1,行 1
列 'authors.au_lname'在選擇列表中無效,因爲該列既不包含在聚合函數中,也不包含在 GROUP BY子句中。
...... 的錯誤提示。

正確的表達:
select au_fname,au_lname,zip, city,state
from authors
group by city,au_lname,au_fname,zip,state

即指定 GROUP BY 時,選擇列表中任一非聚合表達式內的所有列都應包含在GROUP BY 列表中,或者 GROUP BY表達式必須與選擇列表表達式完全匹配。

其實還有更好的辦法:
select au_fname,au_lname,zip, city,state
from authors
order by city
即使用order by 子句

還是authors表,要求在每個城市取一個作者,顯示該作者的左右信息:
可以用如下表達:
select * from authors
where au_id in
(select min(au_id)
from authors
group by city)
其實是分組後取最小ID的

比如要顯示authors表中的au_fname,au_lname,zip,city,state信息,並且按city分組(相同city的排列在一起)

錯誤的表達:
select au_fname,au_lname,zip, city,state
from authors
group by city

就會出現:服務器: 消息 8120,級別 16,狀態 1,行 1
列 'authors.au_fname'在選擇列表中無效,因爲該列既不包含在聚合函數中,也不包含在 GROUP BY子句中。
服務器: 消息 8120,級別 16,狀態 1,行 1
列 'authors.au_lname'在選擇列表中無效,因爲該列既不包含在聚合函數中,也不包含在 GROUP BY子句中。
...... 的錯誤提示。

正確的表達:
select au_fname,au_lname,zip, city,state
from authors
group by city,au_lname,au_fname,zip,state

即指定 GROUP BY時,選擇列表中任一非聚合表達式內的所有列都應包含在 GROUP BY列表中,或者 GROUP BY 表達式必須與選擇列表表達式完全匹配。

其實還有更好的辦法:
select au_fname,au_lname,zip, city,state
from authors
order by city
即使用order by 子句

還是authors表,要求在每個城市取一個作者,顯示該作者的左右信息:
可以用如下表達:
select * from authors
where au_id in
(select min(au_id)
from authors
group by city)
其實是分組後取最小ID的行

發佈了8 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章