Group by語句詳解

 

GROUP BY 語句

GROUP BY 語句用於結合合計函數,根據一個多個列對結果集進行分組。(這裏注意,可以是一個列也可以多個列進行合計分組。)

下面上實例:假設有這麼一張表orders

Sex OrderDate OrderPrice Customer
Male 2008/12/29 1000 Bush
Male 2008/11/23 1600 Carter
Male 2008/10/05 700 Bush
Male 2008/09/28 300 Bush
Female 2008/08/06 2000 Adams
Male 2008/07/21 100 Carter

現在我們希望統計每個客戶的訂單總額,一開始,我想都沒想便用了以下語句進行查詢:

select od.customer, od.sex, sum(od.orderprice) from orders od group by od.customer;

結果就報錯了“ORA-00979: not a GROUP BY expression”

查了好久才發現問題出在哪裏,原來group by語句跟查詢結果息息相關,select語句要查詢n列的話,在group by語句後要跟n-1列(除了sum這一列),所以如果想得到想要的結果,那麼可以使用以下語句:

select od.customer, sum(od.orderprice) from orders od group by od.customer;

Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

又或是用以下語句進行查詢:

select od.customer, od.sex, sum(od.orderprice) from orders od group by od.customer, od.sex;

Customer

Sex

SUM(OrderPrice)

Bush

Male

2000

Carter

Male

1700

Adams

Female

2000

這樣就得到想要的結果了。

說到這裏可能會有人想問,上面的customer對應的sex是一一對應的,所以2個查詢語句得到的結果是一樣的,只是第二條語句多了一列而已,假如條件不是一一對應的,那會怎麼樣,比如說以customer跟orderdate來統計,結果會如何?

這樣的話得到的結果將是customer跟orderdate的交集,在這裏得到的結果就是orders表,因爲每筆訂單的時間都是不一樣的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章