在oracle中,「group by」關鍵字需要和SELECT語句一起使用,用於對查詢結果進行分組,可以按行或表示式的值將行組合到分組彙總的行中;語法「SELECT 欄位列表 FROM 資料表名 GROUP BY 欄位名;」。
本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。
GROUP BY 關鍵字可以根據一個或多個欄位對查詢結果進行分組。
GROUP BY子句在SELECT語句中用於按行或表示式的值將行組合到分組彙總的行中。 GROUP BY子句為每個分組返回一行。
GROUP BY子句通常與AVG(),COUNT(),MAX(),MIN()和SUM()之類的集合函數一起使用。 在這種情況下,聚合函數返回每個分組的摘要資訊。 例如,給定幾個類別的產品,AVG()函數返回每個類別中產品的平均價格。
以下說明了Oracle GROUP BY子句的語法:
SELECT 欄位列表 FROM 資料表名 GROUP BY 欄位名;
GROUP BY子句出現在FROM子句之後。在有提供WHERE子句的情況下,GROUP BY子句必須放在WHERE子句之前。
GROUP BY子句按分組列中的值(如c1,c2和c3)對行進行分組。GROUP BY子句只能包含聚合或分組的列。
如果要指定應該一次計算的多個分組級別,請使用以下ROLLUP語法:
SELECT 欄位列表 FROM 資料表名 GROUP BY ROLLUP(c1,c2,c3);
我們將在範例資料庫中使用以下orders
和order_items
表進行演示:
1. Oracle GROUP BY的基本範例
以下語句使用GROUP BY
子句在orders
表中查詢唯一的訂單狀態:
SELECT status FROM orders GROUP BY status;
執行上面查詢語句,得到以下結果 -
該語句與使用DISTINCT
運運算元的以下語句具有相同的效果:
SELECT DISTINCT status FROM orders;
2. Oracle GROUP BY聚合範例
以下語句返回客戶的訂單數量:
SELECT customer_id, COUNT( order_id ) FROM orders GROUP BY customer_id ORDER BY customer_id;
執行上面查詢語句,得到以下結果 -
在這個例子中,我們按客戶編號來分組訂單,並使用COUNT()
函數返回每個組的訂單數量。
要獲得更有意義的資料,可以按以下方式將orders
表與customers
表一起連線:
SELECT name, COUNT( order_id ) FROM orders INNER JOIN customers USING(customer_id) GROUP BY name ORDER BY name;
執行上面查詢語句,得到以下結果 -
3. Oracle GROUP BY表示式範例
以下範例按年份對訂單進行分組,並返回每年訂單的數量。參考以下查詢語句 -
SELECT EXTRACT(YEAR FROM order_date) YEAR, COUNT( order_id ) FROM orders GROUP BY EXTRACT(YEAR FROM order_date) ORDER BY YEAR;
執行上面查詢語句,得到以下結果 -
在這個例子中,我們使用EXTRACT()
函數從訂單的日期中獲取年份資訊。
與前面的例子不同,這裡使用了一個在GROUP BY
子句中返回年份的表示式。
4. Oracle GROUP BY帶有ROLLUP範例
以下語句計算銷售額並按customer_id
,status
和(customer_id
,status
)對其進行分組:
SELECT customer_id, status, SUM( quantity * unit_price ) sales FROM orders INNER JOIN order_items USING(order_id) GROUP BY ROLLUP( customer_id, status );
執行上面查詢語句,得到以下結果 -
以上就是oracle group by怎麼用的詳細內容,更多請關注TW511.COM其它相關文章!