Oracle에서는 쿼리 결과를 그룹화하기 위해 "그룹화 기준" 키워드를 SELECT 문과 함께 사용해야 합니다. 행은 행 또는 표현식 값별로 그룹화된 요약 행으로 결합될 수 있습니다. "SELECT 필드 목록 FROM 데이터 테이블 이름 GROUP BY 필드 이름;".
이 튜토리얼의 운영 환경: Windows 7 시스템, 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);
다음 순서
및 < code>order_items 데모용 테이블: 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
1. Oracle GROUP BY의 기본 예