oracle group by怎么用

oracle中,“group by”關(guān)鍵字需要和select語(yǔ)句一起使用,用于對(duì)查詢結(jié)果進(jìn)行分組,可以按行或表達(dá)式的值將行組合到分組匯總的行中;語(yǔ)法“SELECT 字段列表 FROM 數(shù)據(jù)表名 GROUP BY 字段名;”。

oracle group by怎么用

本教程操作環(huán)境:Windows7系統(tǒng)、Oracle 11g版、Dell G3電腦。

Oracle GROUP BY子句簡(jiǎn)介

GROUP BY?關(guān)鍵字可以根據(jù)一個(gè)或多個(gè)字段對(duì)查詢結(jié)果進(jìn)行分組。

GROUP BY子句在SELECT語(yǔ)句中用于按行或表達(dá)式的值將行組合到分組匯總的行中。?GROUP BY子句為每個(gè)分組返回一行。

GROUP BY子句通常與AVG(),count(),MAX(),MIN()和SUM()之類的集合函數(shù)一起使用。 在這種情況下,聚合函數(shù)返回每個(gè)分組的摘要信息。 例如,給定幾個(gè)類別的產(chǎn)品,AVG()函數(shù)返回每個(gè)類別中產(chǎn)品的平均價(jià)格。

以下說(shuō)明了Oracle?GROUP BY子句的語(yǔ)法:

SELECT ????字段列表 FROM ????數(shù)據(jù)表名 GROUP?BY ????字段名;

GROUP BY子句出現(xiàn)在FROM子句之后。在有提供WHERE子句的情況下,GROUP BY子句必須放在WHERE子句之前。

GROUP BY子句按分組列中的值(如c1,c2和c3)對(duì)行進(jìn)行分組。GROUP BY子句只能包含聚合或分組的列。

如果要指定應(yīng)該一次計(jì)算的多個(gè)分組級(jí)別,請(qǐng)使用以下ROLLUP語(yǔ)法:

SELECT ????字段列表 FROM ????數(shù)據(jù)表名 GROUP?BY ????ROLLUP(c1,c2,c3);

Oracle GROUP BY示例

我們將在示例數(shù)據(jù)庫(kù)中使用以下orders和order_items表進(jìn)行演示:

oracle group by怎么用

1. Oracle GROUP BY的基本示例

以下語(yǔ)句使用GROUP BY子句在orders表中查找唯一的訂單狀態(tài):

SELECT     status FROM     orders GROUP BY     status;

執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果 –

oracle group by怎么用

該語(yǔ)句與使用DISTINCT運(yùn)算符的以下語(yǔ)句具有相同的效果:

SELECT     DISTINCT status FROM     orders;

2. Oracle GROUP BY聚合示例

以下語(yǔ)句返回客戶的訂單數(shù)量:

SELECT     customer_id, COUNT( order_id ) FROM     orders GROUP BY     customer_id ORDER BY     customer_id;

執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果 –

oracle group by怎么用

在這個(gè)例子中,我們按客戶編號(hào)來(lái)分組訂單,并使用COUNT()函數(shù)返回每個(gè)組的訂單數(shù)量。

要獲得更有意義的數(shù)據(jù),可以按以下方式將orders表與customers表一起連接:

SELECT     name, COUNT( order_id ) FROM     orders INNER JOIN customers         USING(customer_id) GROUP BY     name ORDER BY     name;

執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果 –

oracle group by怎么用

3. Oracle GROUP BY表達(dá)式示例

以下示例按年份對(duì)訂單進(jìn)行分組,并返回每年訂單的數(shù)量。參考以下查詢語(yǔ)句 –

SELECT     EXTRACT(YEAR FROM order_date) YEAR,     COUNT( order_id ) FROM     orders GROUP BY     EXTRACT(YEAR FROM order_date) ORDER BY     YEAR;

執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果 –

oracle group by怎么用

在這個(gè)例子中,我們使用EXTRACT()函數(shù)從訂單的日期中獲取年份信息。

與前面的例子不同,這里使用了一個(gè)在GROUP BY子句中返回年份的表達(dá)式。

4. Oracle GROUP BY帶有ROLLUP示例

以下語(yǔ)句計(jì)算銷售額并按customer_id,status和(customer_id,status)對(duì)其進(jìn)行分組:

SELECT     customer_id,     status,     SUM( quantity * unit_price ) sales FROM     orders INNER JOIN order_items         USING(order_id) GROUP BY     ROLLUP(         customer_id,         status     );

執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果 –

oracle group by怎么用

推薦教程:《Oracle教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享