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表,因爲每筆訂單的時間都是不一樣的。