使用Oracle实现分组数据的展示(oracle分组显示)

使用Oracle实现分组数据的展示

在数据库中,我们经常需要对数据进行分组统计。Oracle数据库中,可以使用GROUP BY子句实现按照指定字段分组,再进行聚合操作。本文将介绍使用Oracle实现分组数据的展示的方法。

一、创建表

我们先创建一个表person,存储人员信息。使用以下DDL语句进行创建:

CREATE TABLE person(
id NUMBER(10),
name VARCHAR2(20),
gender VARCHAR2(10),
age NUMBER(3),
address VARCHAR2(50),
phone VARCHAR2(20),
salary NUMBER(8,2)
);

二、插入数据

执行以下SQL语句,向person表中插入一些数据:

INSERT INTO person VALUES(1,'张三','男',23,'北京市海淀区','13812345678',8000);
INSERT INTO person VALUES(2,'李四','女',24,'北京市朝阳区','13912345678',7500);
INSERT INTO person VALUES(3,'王五','男',25,'北京市昌平区','13712345678',9000);
INSERT INTO person VALUES(4,'赵六','女',26,'北京市丰台区','13612345678',8500);
INSERT INTO person VALUES(5,'钱七','男',27,'北京市石景山区','13512345678',9500);
INSERT INTO person VALUES(6,'孙八','女',28,'北京市大兴区','13412345678',7000);
INSERT INTO person VALUES(7,'周九','男',29,'北京市房山区','13312345678',10000);

三、分组查询

1.按照性别分组,统计人数、最大薪资、平均薪资:

SELECT gender, COUNT(*), MAX(salary), AVG(salary)
FROM person
GROUP BY gender;

运行结果如下:

GENDER COUNT(*) MAX(SALARY) AVG(SALARY)
------ -------- ----------- -----------
女 3 8500 7666.66667
男 4 9500 8625

2.按照年龄段分组,统计人数、最大薪资、平均薪资:

SELECT 
CASE
WHEN age
WHEN age >= 25 AND age
ELSE '30岁及以上'
END AS age_range,
COUNT(*) AS cnt,
MAX(salary) AS max_salary,
AVG(salary) AS avg_salary
FROM person
GROUP BY
CASE
WHEN age
WHEN age >= 25 AND age
ELSE '30岁及以上'
END;

运行结果如下:

AGE_RANGE   CNT MAX_SALARY AVG_SALARY
----------- --- ---------- ----------
25岁以下 2 7500 7250
25~30岁 4 9500 8375
30岁及以上 1 8000 8000

四、使用HAVING子句筛选结果

在分组查询的结果中,我们有时需要排除掉一些不符合条件的分组。这时,可以使用HAVING子句来进行筛选。

1.查询女性中薪资大于8000的人数:

SELECT gender, COUNT(*)
FROM person
WHERE gender = '女' AND salary > 8000
GROUP BY gender
HAVING COUNT(*) > 0;

运行结果如下:

GENDER   COUNT(*)
------ ----------
女 1

2.按照年龄段分组,统计人数、最大薪资、平均薪资,筛选出平均薪资大于8000的分组:

SELECT 
CASE
WHEN age
WHEN age >= 25 AND age
ELSE '30岁及以上'
END AS age_range,
COUNT(*) AS cnt,
MAX(salary) AS max_salary,
AVG(salary) AS avg_salary
FROM person
GROUP BY
CASE
WHEN age
WHEN age >= 25 AND age
ELSE '30岁及以上'
END
HAVING AVG(salary) > 8000;

运行结果如下:

 AGE_RANGE   CNT MAX_SALARY AVG_SALARY
----------- --- ---------- ----------
30岁及以上 1 8000 8000

总结:

使用Oracle实现分组数据的展示需要用到GROUP BY、HAVING等子句。在实际开发中,我们可以根据具体需求,按照不同的字段进行分组,再进行聚合查询和筛选。这可以帮助我们更好地了解数据的特征和数据之间的关系,对业务决策具有重要的参考价值。


数据运维技术 » 使用Oracle实现分组数据的展示(oracle分组显示)