本文共 1792 字,大约阅读时间需要 5 分钟。
在进行分组查询时,通常会使用 group by 关键字。例如,按照 DEPARTMENT_ID 分组统计 SALARY 的平均值时,SQL 语句可以写成:
select department_id, avg(salary) from test group by department_id;
这意味着 group by 关键字会将 DEPARTMENT_ID 相同的记录分组在一起,然后对每个组内的 SALARY 进行平均值计算。如果没有指定具体的聚合函数,默认会对所有列进行聚合(通常是 SUM)。
group by 关键字的语法详解group by 是用于分组查询的关键字,常用于与聚合函数(如 SUM、AVG、COUNT 等)配合使用。它的作用是将数据按指定字段进行分组。
select 列表中,只能出现 group by 关键字后面的字段。group by 后面用逗号分隔多个字段。group by 后面的字段可以是数字段,也可以是字符串字段,具体取决于数据库类型。select deptno, avg(sal) as avgs from emp group by deptno;
select deptno, avg(sal) as avgs from emp group by deptno;
select deptno, job_title, avg(sal) as avgs from emp group by deptno, job_title;
在实际应用中,通常需要结合 WHERE 和 HAVING 两种筛选方式。
使用 WHERE 子句对原始数据进行筛选,然后再进行分组查询。
select deptno, avg(sal) as avgs from empwhere deptno = '10' group by deptno;
如果需要在分组后再对结果集进行筛选,可以使用 HAVING 子句。
select deptno, avg(sal) as avgs from empgroup by deptnohaving avg(sal) > 2000;
如果需要同时使用分组前和分组后的筛选,可以结合使用。
select deptno, count(*) as emp_count from empwhere year(hire_date) = '1981'group by deptnohaving count(*) > 3;
select length(ename) as len, count(*) as counts from empgroup by lenhaving counts > 3;
select deptno, job_title, avg(sal) as avgs from empgroup by deptno, job_title;
group by 和 order by 的结合select deptno, avg(sal) as avgs from empgroup by deptnoorder by avgs desc;
select deptno, avg(sal) as avgs from empgroup by deptnoorder by avgs asc;
HAVING 子句中。WHERE 子句进行分组前的筛选,这对于性能优化很重要。GROUP BY 支持单个字段分组、多个字段分组以及基于函数的分组。通过以上方法,可以灵活地进行分组查询,满足不同场景下的需求。如果需要更深入的学习,可以关注数据分析与统计学的相关内容,或者加入相关的微信公众号,获取更多实用的学习资源。
转载地址:http://ntzz.baihongyu.com/