使用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 personGROUP 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 personGROUP 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 837530岁及以上 1 8000 8000
四、使用HAVING子句筛选结果
在分组查询的结果中,我们有时需要排除掉一些不符合条件的分组。这时,可以使用HAVING子句来进行筛选。
1.查询女性中薪资大于8000的人数:
SELECT gender, COUNT(*)
FROM personWHERE gender = '女' AND salary > 8000
GROUP BY genderHAVING 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 personGROUP BY
CASE WHEN age
WHEN age >= 25 AND age ELSE '30岁及以上'
ENDHAVING AVG(salary) > 8000;
运行结果如下:
AGE_RANGE CNT MAX_SALARY AVG_SALARY
----------- --- ---------- ---------- 30岁及以上 1 8000 8000
总结:
使用Oracle实现分组数据的展示需要用到GROUP BY、HAVING等子句。在实际开发中,我们可以根据具体需求,按照不同的字段进行分组,再进行聚合查询和筛选。这可以帮助我们更好地了解数据的特征和数据之间的关系,对业务决策具有重要的参考价值。