首頁 >資料庫 >Oracle >oracle group by怎麼用

oracle group by怎麼用

青灯夜游
青灯夜游原創
2022-03-17 12:47:5210512瀏覽

在oracle中,「group by」關鍵字需要和SELECT語句一起使用,用於對查詢結果進行分組,可以按行或表達式的值將行組合到分組匯總的行中;語法“SELECT 欄位清單FROM 資料表名GROUP BY 欄位名稱;”。

oracle group by怎麼用

本教學操作環境:Windows7系統、Oracle 11g版、Dell G3電腦。

Oracle GROUP BY子句簡介

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);

Oracle GROUP BY範例

我們將在範例資料庫中使用以下ordersorder_items表格進行示範:

oracle group by怎麼用

##1. Oracle GROUP BY的基本範例

以下語句使用

GROUP BY子句在orders表格中尋找唯一的訂單狀態:

SELECT
    status
FROM
    orders
GROUP BY
    status;
執行上面查詢語句,得到以下結果-

oracle group by怎麼用

#該語句與使用

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;
執行上面查詢語句,得到以下結果-

oracle group by怎麼用

在這個例子中,我們按客戶編號來分組訂單,並使用

COUNT()函數傳回每個組的訂單數量。

要獲得更有意義的數據,可以按以下方式將

orders表與customers表一起連接:

SELECT
    name, COUNT( order_id )
FROM
    orders
INNER JOIN customers
        USING(customer_id)
GROUP BY
    name
ORDER BY
    name;
執行上面查詢語句,得到以下結果-

oracle group by怎麼用

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;
執行上面查詢語句,得到以下結果-

oracle group by怎麼用

#在這個範例中,我們使用

EXTRACT()函數從訂單的日期中取得年份資訊。

與前面的範例不同,這裡使用了一個在

GROUP BY子句中傳回年份的表達式。

4. Oracle GROUP BY帶有ROLLUP範例

#以下語句計算銷售並按

customer_idstatus和(customer_idstatus)將其分組:

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怎麼用

#推薦教學:《

Oracle教學

以上是oracle group by怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn