博客
关于我
MySQL学习-排序与分组函数
阅读量:792 次
发布时间:2023-02-12

本文共 3895 字,大约阅读时间需要 12 分钟。

MySQL 查询操作及数据分析实例

1. 数据表结构与数据展示

以下是MySQL数据库中的emp表结构及其数据展示:

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 1980-12-17 800.00 NULL 20
7499 ALLEN SALESMAN 7698 1981-02-20 1600.00 300.00 30

字段分别为:员工编号、员工姓名、员工职位、员工上级领导编号、员工雇佣日期、员工薪水、员工津贴、员工部门编号。


2. 数据排序

2.1 按工资升序查询员工名和薪资

select ename, sal from emp order by sal;

结果如下:

ename sal
SMITH 800.00
JAMES 950.00

2.2 按工资降序查询员工名和薪资

select ename, sal from emp order by sal desc;

结果如下:

ename sal
KING 5000.00
SCOTT 3000.00

2.3 按工资和姓名同时排序

select ename, sal from emp order by sal desc, ename asc;

结果如下:

ename sal
KING 5000.00
FORD 3000.00

3. 分组函数

3.1 计算工资总和

select sum(sal) from emp;

结果:

sum(sal)
29025.00

3.2 找出最高工资

select max(sal) from emp;

结果:

max(sal)
5000.00

3.3 找出最低工资

select min(sal) from emp;

结果:

min(sal)
800.00

3.4 计算平均工资

select avg(sal) from emp;

结果:

avg(sal)
2073.214286

3.5 找出总人数

select count(*) from emp;

结果:

count(*)
14

3.6 统计津贴不为NULL的员工数量

select count(comm) from emp;

结果:

count(comm)
4

3.7 计算所有员工的总津贴

select sum(comm) from emp;

结果:

sum(comm)
2200.00

3.8 计算部门内员工数量(假设DEPTNO为数字值)

select count(*) from emp where deptno = 20;

结果:

count(*)
7

3.9 组合分组函数

select count(*), sum(sal), avg(sal), max(sal), min(sal) from emp;

结果如下:

count(*) sum(sal) avg(sal) max(sal) min(sal)
14 29025.00 2073.214286 5000.00 800.00

4. 常见问题解答

4.1 为什么直接在WHERE子句中使用分组函数会报错?

当直接在WHERE子句中使用分组函数时,会因为分组函数的执行顺序问题导致错误。分组函数必须在GROUP BY子句中明确声明。正确的做法是:

select ename, sal from emp where sal > (select avg(sal) from emp);

4.2 如何处理包含NULL值的计算

使用ifnull()函数可以处理NULL值。例如:

select ename, ifnull(comm, 0) as comm from emp;

结果如下:

ename comm
SMITH 0.00

4.3 如何计算每个员工的年薪(假设年薪=月薪×12)

select ename, (sal + ifnull(comm, 0)) * 12 as yearsal from emp;

结果如下:

ename yearsal
SMITH 9600.00

5. 注意事项

  • 排序字段优先级:在多个排序字段时,前面的字段具有更高的优先级。
  • 分组函数执行顺序:GROUP BY必须在WHERE子句之后执行。
  • 分组函数与NULL处理:所有分组函数都自动忽略NULL值。
  • 子查询的正确使用:在需要嵌套查询时,确保子查询的逻辑正确。
  • 通过以上示例,可以更好地理解和应用MySQL数据库中的查询操作和数据分析功能。

    转载地址:http://qrbfk.baihongyu.com/

    你可能感兴趣的文章
    mysql加强(3)~分组(统计)查询
    查看>>
    mysql加强(4)~多表查询:笛卡尔积、消除笛卡尔积操作(等值、非等值连接),内连接(隐式连接、显示连接)、外连接、自连接
    查看>>
    mysql加强(5)~DML 增删改操作和 DQL 查询操作
    查看>>
    mysql加强(6)~子查询简单介绍、子查询分类
    查看>>
    mysql加强(7)~事务、事务并发、解决事务并发的方法
    查看>>
    MySQL千万级多表关联SQL语句调优
    查看>>
    mysql千万级大数据SQL查询优化
    查看>>
    MySQL千万级大表优化策略
    查看>>
    MySQL单实例或多实例启动脚本
    查看>>
    MySQL压缩包方式安装,傻瓜式教学
    查看>>
    MySQL原理、设计与应用全面解析
    查看>>
    MySQL原理简介—1.SQL的执行流程
    查看>>
    MySQL参数调优详解
    查看>>
    mysql参考触发条件_MySQL 5.0-触发器(参考)_mysql
    查看>>
    MySQL及navicat for mysql中文乱码
    查看>>
    MySqL双机热备份(二)--MysqL主-主复制实现
    查看>>
    MySQL各个版本区别及问题总结
    查看>>
    MySql各种查询
    查看>>
    mysql同主机下 复制一个数据库所有文件到另一个数据库
    查看>>
    mysql启动以后会自动关闭_驾照虽然是C1,一直是开自动挡的车,会不会以后就不会开手动了?...
    查看>>