• 【二】【SQL】去重表数据及分组聚合查询


    去重表数据

    表的准备工作

    去除表中重复的数据,重复的数据只留一份。

     
    
    1. mysql> create table duplicate_table (
    2. -> id int,
    3. -> name varchar(20)
    4. -> );
    5. Query OK, 0 rows affected (0.03 sec)
    6. mysql> insert into duplicate_table values
    7. -> (100,'aaa'),
    8. -> (100,'aaa'),
    9. -> (200,'bbb'),
    10. -> (200,'bbb'),
    11. -> (200,'bbb'),
    12. -> (300,'ccc');
    13. Query OK, 6 rows affected (0.01 sec)
    14. Records: 6 Duplicates: 0 Warnings: 0
    15. mysql> select *from duplicate_table;
    16. +------+------+
    17. | id | name |
    18. +------+------+
    19. | 100 | aaa |
    20. | 100 | aaa |
    21. | 200 | bbb |
    22. | 200 | bbb |
    23. | 200 | bbb |
    24. | 300 | ccc |
    25. +------+------+
    26. 6 rows in set (0.00 sec)
    27. mysql>

    去除表中重复的数据,重复的数据只留一份

     
    
    1. mysql> create table no_duplicate_table like duplicate_table;
    2. Query OK, 0 rows affected (0.03 sec)
    3. mysql> desc no_duplicate_table;
    4. +-------+-------------+------+-----+---------+-------+
    5. | Field | Type | Null | Key | Default | Extra |
    6. +-------+-------------+------+-----+---------+-------+
    7. | id | int(11) | YES | | NULL | |
    8. | name | varchar(20) | YES | | NULL | |
    9. +-------+-------------+------+-----+---------+-------+
    10. 2 rows in set (0.00 sec)
    11. mysql> desc duplicate_table;
    12. +-------+-------------+------+-----+---------+-------+
    13. | Field | Type | Null | Key | Default | Extra |
    14. +-------+-------------+------+-----+---------+-------+
    15. | id | int(11) | YES | | NULL | |
    16. | name | varchar(20) | YES | | NULL | |
    17. +-------+-------------+------+-----+---------+-------+
    18. 2 rows in set (0.00 sec)
    19. mysql> select distinct *from no_duplicate_table ;
    20. Empty set (0.00 sec)
    21. mysql> select distinct *from duplicate_table ;
    22. +------+------+
    23. | id | name |
    24. +------+------+
    25. | 100 | aaa |
    26. | 200 | bbb |
    27. | 300 | ccc |
    28. +------+------+
    29. 3 rows in set (0.00 sec)
    30. mysql> insert into no_duplicate_table select distinct *from duplicate_table;
    31. Query OK, 3 rows affected (0.01 sec)
    32. Records: 3 Duplicates: 0 Warnings: 0
    33. mysql> select *from no_duplicate_table;
    34. +------+------+
    35. | id | name |
    36. +------+------+
    37. | 100 | aaa |
    38. | 200 | bbb |
    39. | 300 | ccc |
    40. +------+------+
    41. 3 rows in set (0.00 sec)
    42. mysql> rename table duplicate_table to old_duplicate_table ;
    43. Query OK, 0 rows affected (0.04 sec)
    44. mysql> rename table no_duplicate_table to duplicate_table ;
    45. Query OK, 0 rows affected (0.01 sec)
    46. mysql> select *from duplicate_table ;
    47. +------+------+
    48. | id | name |
    49. +------+------+
    50. | 100 | aaa |
    51. | 200 | bbb |
    52. | 300 | ccc |
    53. +------+------+
    54. 3 rows in set (0.00 sec)
    55. mysql>

    聚合统计

    函数

    说明

    COUNT(DISTINCT)

    返回查询到的数据的 数量

    SUM(DISTINCT)

    返回查询到的数据的 总和,不是数字没有意义

    AVG(DISTINCT)

    返回查询到的数据的 平均值,不是数字没有意义

    MAX(DISTINCT)

    返回查询到的数据的 最大值,不是数字没有意义

    MIN(DISTINCT)

    返回查询到的数据的 最小值,不是数字没有意义

    count简单使用

     
    
    1. mysql> select *from exam_result;
    2. +----+-----------+---------+------+---------+
    3. | id | name | chinese | math | english |
    4. +----+-----------+---------+------+---------+
    5. | 1 | 唐三藏 | 134 | 98 | 56 |
    6. | 3 | 猪悟能 | 176 | 98 | 90 |
    7. | 4 | 曹孟德 | 140 | 90 | 67 |
    8. | 6 | 孙权 | 140 | 73 | 78 |
    9. | 7 | 宋公明 | 150 | 95 | 30 |
    10. +----+-----------+---------+------+---------+
    11. 5 rows in set (0.00 sec)
    12. mysql> select count(*) from exam_result;
    13. +----------+
    14. | count(*) |
    15. +----------+
    16. | 5 |
    17. +----------+
    18. 1 row in set (0.00 sec)
    19. mysql> select count(1) 总数 from exam_result;
    20. +--------+
    21. | 总数 |
    22. +--------+
    23. | 5 |
    24. +--------+
    25. 1 row in set (0.00 sec)
    26. mysql> select count(2) 总数 from exam_result;
    27. +--------+
    28. | 总数 |
    29. +--------+
    30. | 5 |
    31. +--------+
    32. 1 row in set (0.00 sec)
    33. mysql> select math from exam_result;
    34. +------+
    35. | math |
    36. +------+
    37. | 98 |
    38. | 98 |
    39. | 90 |
    40. | 73 |
    41. | 95 |
    42. +------+
    43. 5 rows in set (0.00 sec)
    44. mysql> select count(math) from exam_result;
    45. +-------------+
    46. | count(math) |
    47. +-------------+
    48. | 5 |
    49. +-------------+
    50. 1 row in set (0.00 sec)
    51. mysql> select count(math) as res from exam_result;
    52. +-----+
    53. | res |
    54. +-----+
    55. | 5 |
    56. +-----+
    57. 1 row in set (0.00 sec)
    58. mysql>

    统计本次考试的数学成绩分数个数

     
    
    1. mysql> select math from exam_result;
    2. +------+
    3. | math |
    4. +------+
    5. | 98 |
    6. | 98 |
    7. | 90 |
    8. | 73 |
    9. | 95 |
    10. +------+
    11. 5 rows in set (0.00 sec)
    12. mysql> select distinct count(math) as res from exam_result;
    13. +-----+
    14. | res |
    15. +-----+
    16. | 5 |
    17. +-----+
    18. 1 row in set (0.01 sec)
    19. mysql> select count(distinct math) as res from exam_result;
    20. +-----+
    21. | res |
    22. +-----+
    23. | 4 |
    24. +-----+
    25. 1 row in set (0.00 sec)
    26. mysql>

    数学英语平均分,不及格个数,不及格总分,不及格平均分

     
    
    1. mysql> select sum(math) from exam_result;
    2. +-----------+
    3. | sum(math) |
    4. +-----------+
    5. | 454 |
    6. +-----------+
    7. 1 row in set (0.00 sec)
    8. mysql> select sum(math)/count(*) from exam_result;
    9. +--------------------+
    10. | sum(math)/count(*) |
    11. +--------------------+
    12. | 90.8 |
    13. +--------------------+
    14. 1 row in set (0.00 sec)
    15. mysql> select sum(english)/count(*) from exam_result;
    16. +-----------------------+
    17. | sum(english)/count(*) |
    18. +-----------------------+
    19. | 64.2 |
    20. +-----------------------+
    21. 1 row in set (0.00 sec)
    22. mysql> select count(*) from exam_result where math<60;
    23. +----------+
    24. | count(*) |
    25. +----------+
    26. | 0 |
    27. +----------+
    28. 1 row in set (0.00 sec)
    29. mysql> select count(*) from exam_result where english<60;
    30. +----------+
    31. | count(*) |
    32. +----------+
    33. | 2 |
    34. +----------+
    35. 1 row in set (0.00 sec)
    36. mysql> select *from exam_result where english<60;
    37. +----+-----------+---------+------+---------+
    38. | id | name | chinese | math | english |
    39. +----+-----------+---------+------+---------+
    40. | 1 | 唐三藏 | 134 | 98 | 56 |
    41. | 7 | 宋公明 | 150 | 95 | 30 |
    42. +----+-----------+---------+------+---------+
    43. 2 rows in set (0.00 sec)
    44. mysql> select sum(english) from exam_result where english<60;
    45. +--------------+
    46. | sum(english) |
    47. +--------------+
    48. | 86 |
    49. +--------------+
    50. 1 row in set (0.00 sec)
    51. mysql> select sum(english)/count(english) from exam_result where english<60;
    52. +-----------------------------+
    53. | sum(english)/count(english) |
    54. +-----------------------------+
    55. | 43 |
    56. +-----------------------------+
    57. 1 row in set (0.00 sec)
    58. mysql>

    统计平均总分

     
    
    1. mysql> select sum(math)/count(*) from exam_result;
    2. +--------------------+
    3. | sum(math)/count(*) |
    4. +--------------------+
    5. | 90.8 |
    6. +--------------------+
    7. 1 row in set (0.00 sec)
    8. mysql> select avg(math) from exam_result;
    9. +-----------+
    10. | avg(math) |
    11. +-----------+
    12. | 90.8 |
    13. +-----------+
    14. 1 row in set (0.00 sec)
    15. mysql> select avg(math+chinese+english) from exam_result;
    16. +---------------------------+
    17. | avg(math+chinese+english) |
    18. +---------------------------+
    19. | 303 |
    20. +---------------------------+
    21. 1 row in set (0.00 sec)
    22. mysql> select name,math+english+chinese from exam_result;
    23. +-----------+----------------------+
    24. | name | math+english+chinese |
    25. +-----------+----------------------+
    26. | 唐三藏 | 288 |
    27. | 猪悟能 | 364 |
    28. | 曹孟德 | 297 |
    29. | 孙权 | 291 |
    30. | 宋公明 | 275 |
    31. +-----------+----------------------+
    32. 5 rows in set (0.00 sec)
    33. mysql> select max(english) from exam_result;
    34. +--------------+
    35. | max(english) |
    36. +--------------+
    37. | 90 |
    38. +--------------+
    39. 1 row in set (0.00 sec)
    40. mysql> select name ,max(english) from exam_result;
    41. ERROR 1140 (42000): In aggregated query without GROUP BY, expression #1 of SELECT list containode=only_full_group_by
    42. mysql>

    返回>70分以上的数学最低分

     
    
    1. mysql> select math from exam_result;
    2. +------+
    3. | math |
    4. +------+
    5. | 98 |
    6. | 98 |
    7. | 90 |
    8. | 73 |
    9. | 95 |
    10. +------+
    11. 5 rows in set (0.00 sec)
    12. mysql> select math from exam_result where math>70;
    13. +------+
    14. | math |
    15. +------+
    16. | 98 |
    17. | 98 |
    18. | 90 |
    19. | 73 |
    20. | 95 |
    21. +------+
    22. 5 rows in set (0.00 sec)
    23. mysql> select min(math) from exam_result where math>70;
    24. +-----------+
    25. | min(math) |
    26. +-----------+
    27. | 73 |
    28. +-----------+
    29. 1 row in set (0.00 sec)
    30. mysql>

    分组聚合查询

    导入数据库样例sql文件

    scott_data.sql(文件名)(下面是文件内容)

    1. DROP database IF EXISTS `scott`;
    2. CREATE database IF NOT EXISTS `scott` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    3. USE `scott`;
    4. DROP TABLE IF EXISTS `dept`;
    5. CREATE TABLE `dept` (
    6. `deptno` int(2) unsigned zerofill NOT NULL COMMENT '部门编号',
    7. `dname` varchar(14) DEFAULT NULL COMMENT '部门名称',
    8. `loc` varchar(13) DEFAULT NULL COMMENT '部门所在地点'
    9. );
    10. DROP TABLE IF EXISTS `emp`;
    11. CREATE TABLE `emp` (
    12. `empno` int(6) unsigned zerofill NOT NULL COMMENT '雇员编号',
    13. `ename` varchar(10) DEFAULT NULL COMMENT '雇员姓名',
    14. `job` varchar(9) DEFAULT NULL COMMENT '雇员职位',
    15. `mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '雇员领导编号',
    16. `hiredate` datetime DEFAULT NULL COMMENT '雇佣时间',
    17. `sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪',
    18. `comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',
    19. `deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号'
    20. );
    21. DROP TABLE IF EXISTS `salgrade`;
    22. CREATE TABLE `salgrade` (
    23. `grade` int(11) DEFAULT NULL COMMENT '等级',
    24. `losal` int(11) DEFAULT NULL COMMENT '此等级最低工资',
    25. `hisal` int(11) DEFAULT NULL COMMENT '此等级最高工资'
    26. );
    27. insert into dept (deptno, dname, loc)
    28. values (10, 'ACCOUNTING', 'NEW YORK');
    29. insert into dept (deptno, dname, loc)
    30. values (20, 'RESEARCH', 'DALLAS');
    31. insert into dept (deptno, dname, loc)
    32. values (30, 'SALES', 'CHICAGO');
    33. insert into dept (deptno, dname, loc)
    34. values (40, 'OPERATIONS', 'BOSTON');
    35. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    36. values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);
    37. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    38. values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
    39. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    40. values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
    41. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    42. values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);
    43. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    44. values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
    45. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    46. values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);
    47. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    48. values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);
    49. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    50. values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);
    51. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    52. values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);
    53. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    54. values (7844, 'TURNER', 'SALESMAN', 7698,'1981-09-08', 1500, 0, 30);
    55. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    56. values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);
    57. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    58. values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);
    59. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    60. values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);
    61. insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
    62. values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);
    63. insert into salgrade (grade, losal, hisal) values (1, 700, 1200);
    64. insert into salgrade (grade, losal, hisal) values (2, 1201, 1400);
    65. insert into salgrade (grade, losal, hisal) values (3, 1401, 2000);
    66. insert into salgrade (grade, losal, hisal) values (4, 2001, 3000);
    67. insert into salgrade (grade, losal, hisal) values (5, 3001, 9999);

     rz选择scott_data.sql文件导入数据

    1. [root@VM-8-12-centos d1]# cd /var/lib/mysql
    2. [root@VM-8-12-centos mysql]# ls
    3. auto.cnf d1 ibtmp1 private_key.pem
    4. ca-key.pem ib_buffer_pool mysql public_key.pem
    5. ca.pem ibdata1 mysql.sock server-cert.pem
    6. client-cert.pem ib_logfile0 mysql.sock.lock server-key.pem
    7. client-key.pem ib_logfile1 performance_schema sys
    8. [root@VM-8-12-centos mysql]# rz
    9. [root@VM-8-12-centos mysql]# ls
    10. auto.cnf d1 ibtmp1 private_key.pem sys
    11. ca-key.pem ib_buffer_pool mysql public_key.pem
    12. ca.pem ibdata1 mysql.sock scott_data.sql
    13. client-cert.pem ib_logfile0 mysql.sock.lock server-cert.pem
    14. client-key.pem ib_logfile1 performance_schema server-key.pem
     
    
    1. mysql> source /var/lib/mysql/scott_data.sql;
    2. Query OK, 0 rows affected, 1 warning (0.00 sec)
    3. Query OK, 1 row affected (0.00 sec)
    4. Database changed
    5. Query OK, 0 rows affected, 1 warning (0.00 sec)
    6. Query OK, 0 rows affected (0.03 sec)
    7. Query OK, 0 rows affected, 1 warning (0.00 sec)
    8. Query OK, 0 rows affected (0.02 sec)
    9. Query OK, 0 rows affected, 1 warning (0.00 sec)
    10. Query OK, 0 rows affected (0.03 sec)
    11. Query OK, 1 row affected (0.00 sec)
    12. Query OK, 1 row affected (0.00 sec)
    13. Query OK, 1 row affected (0.01 sec)
    14. Query OK, 1 row affected (0.00 sec)
    15. Query OK, 1 row affected (0.01 sec)
    16. Query OK, 1 row affected (0.00 sec)
    17. Query OK, 1 row affected (0.00 sec)
    18. Query OK, 1 row affected (0.00 sec)
    19. Query OK, 1 row affected (0.01 sec)
    20. Query OK, 1 row affected (0.00 sec)
    21. Query OK, 1 row affected (0.00 sec)
    22. Query OK, 1 row affected (0.01 sec)
    23. Query OK, 1 row affected (0.00 sec)
    24. Query OK, 1 row affected (0.00 sec)
    25. Query OK, 1 row affected (0.00 sec)
    26. Query OK, 1 row affected (0.01 sec)
    27. Query OK, 1 row affected (0.00 sec)
    28. Query OK, 1 row affected (0.00 sec)
    29. Query OK, 1 row affected (0.01 sec)
    30. Query OK, 1 row affected (0.00 sec)
    31. Query OK, 1 row affected (0.02 sec)
    32. Query OK, 1 row affected (0.00 sec)
    33. Query OK, 1 row affected (0.00 sec)
    34. mysql> show tables;
    35. +-----------------+
    36. | Tables_in_scott |
    37. +-----------------+
    38. | dept |
    39. | emp |
    40. | salgrade |
    41. +-----------------+
    42. 3 rows in set (0.01 sec)
    43. mysql> show databases;
    44. +--------------------+
    45. | Database |
    46. +--------------------+
    47. | information_schema |
    48. | d1 |
    49. | mysql |
    50. | performance_schema |
    51. | scott |
    52. | sys |
    53. +--------------------+
    54. 6 rows in set (0.00 sec)
    55. mysql>

    展示样例sql数据表

     
    
    1. mysql> show tables;
    2. +-----------------+
    3. | Tables_in_scott |
    4. +-----------------+
    5. | dept |
    6. | emp |
    7. | salgrade |
    8. +-----------------+
    9. 3 rows in set (0.00 sec)
    10. mysql> desc dept;
    11. +--------+--------------------------+------+-----+---------+-------+
    12. | Field | Type | Null | Key | Default | Extra |
    13. +--------+--------------------------+------+-----+---------+-------+
    14. | deptno | int(2) unsigned zerofill | NO | | NULL | |
    15. | dname | varchar(14) | YES | | NULL | |
    16. | loc | varchar(13) | YES | | NULL | |
    17. +--------+--------------------------+------+-----+---------+-------+
    18. 3 rows in set (0.00 sec)
    19. mysql> select* from dept;
    20. +--------+------------+----------+
    21. | deptno | dname | loc |
    22. +--------+------------+----------+
    23. | 10 | ACCOUNTING | NEW YORK |
    24. | 20 | RESEARCH | DALLAS |
    25. | 30 | SALES | CHICAGO |
    26. | 40 | OPERATIONS | BOSTON |
    27. +--------+------------+----------+
    28. 4 rows in set (0.00 sec)
    29. mysql> desc emp;
    30. +----------+--------------------------+------+-----+---------+-------+
    31. | Field | Type | Null | Key | Default | Extra |
    32. +----------+--------------------------+------+-----+---------+-------+
    33. | empno | int(6) unsigned zerofill | NO | | NULL | |
    34. | ename | varchar(10) | YES | | NULL | |
    35. | job | varchar(9) | YES | | NULL | |
    36. | mgr | int(4) unsigned zerofill | YES | | NULL | |
    37. | hiredate | datetime | YES | | NULL | |
    38. | sal | decimal(7,2) | YES | | NULL | |
    39. | comm | decimal(7,2) | YES | | NULL | |
    40. | deptno | int(2) unsigned zerofill | YES | | NULL | |
    41. +----------+--------------------------+------+-----+---------+-------+
    42. 8 rows in set (0.00 sec)
    43. mysql> select*from emp;
    44. +--------+--------+-----------+------+---------------------+---------+---------+--------+
    45. | empno | ename | job | mgr | hiredate | sal | comm | deptno |
    46. +--------+--------+-----------+------+---------------------+---------+---------+--------+
    47. | 007369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800.00 | NULL | 20 |
    48. | 007499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600.00 | 300.00 | 30 |
    49. | 007521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250.00 | 500.00 | 30 |
    50. | 007566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975.00 | NULL | 20 |
    51. | 007654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 | 30 |
    52. | 007698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850.00 | NULL | 30 |
    53. | 007782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450.00 | NULL | 10 |
    54. | 007788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000.00 | NULL | 20 |
    55. | 007839 | KING | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000.00 | NULL | 10 |
    56. | 007844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500.00 | 0.00 | 30 |
    57. | 007876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100.00 | NULL | 20 |
    58. | 007900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950.00 | NULL | 30 |
    59. | 007902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000.00 | NULL | 20 |
    60. | 007934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300.00 | NULL | 10 |
    61. +--------+--------+-----------+------+---------------------+---------+---------+--------+
    62. 14 rows in set (0.00 sec)
    63. mysql> desc salgrade;
    64. +-------+---------+------+-----+---------+-------+
    65. | Field | Type | Null | Key | Default | Extra |
    66. +-------+---------+------+-----+---------+-------+
    67. | grade | int(11) | YES | | NULL | |
    68. | losal | int(11) | YES | | NULL | |
    69. | hisal | int(11) | YES | | NULL | |
    70. +-------+---------+------+-----+---------+-------+
    71. 3 rows in set (0.00 sec)
    72. mysql> select *from salgrade;
    73. +-------+-------+-------+
    74. | grade | losal | hisal |
    75. +-------+-------+-------+
    76. | 1 | 700 | 1200 |
    77. | 2 | 1201 | 1400 |
    78. | 3 | 1401 | 2000 |
    79. | 4 | 2001 | 3000 |
    80. | 5 | 3001 | 9999 |
    81. +-------+-------+-------+
    82. 5 rows in set (0.00 sec)
    83. mysql>

    如何显示每个部门的平均工资和最高工资

     
    
    1. mysql> select max(sal) 最高,avg(sal) 平均 from emp;
    2. +---------+-------------+
    3. | 最高 | 平均 |
    4. +---------+-------------+
    5. | 5000.00 | 2073.214286 |
    6. +---------+-------------+
    7. 1 row in set (0.00 sec)
    8. mysql> select max(sal) 最高,avg(sal) 平均 from emp group by deptno;
    9. +---------+-------------+
    10. | 最高 | 平均 |
    11. +---------+-------------+
    12. | 5000.00 | 2916.666667 |
    13. | 3000.00 | 2175.000000 |
    14. | 2850.00 | 1566.666667 |
    15. +---------+-------------+
    16. 3 rows in set (0.00 sec)
    17. mysql> select deptno,max(sal) 最高,avg(sal) 平均 from emp group by deptno;
    18. +--------+---------+-------------+
    19. | deptno | 最高 | 平均 |
    20. +--------+---------+-------------+
    21. | 10 | 5000.00 | 2916.666667 |
    22. | 20 | 3000.00 | 2175.000000 |
    23. | 30 | 2850.00 | 1566.666667 |
    24. +--------+---------+-------------+
    25. 3 rows in set (0.00 sec)
    26. mysql>

    显示每个部门的每种岗位的平均工资和最低工资

     
    
    1. mysql> select *from emp;
    2. +--------+--------+-----------+------+---------------------+---------+---------+--------+
    3. | empno | ename | job | mgr | hiredate | sal | comm | deptno |
    4. +--------+--------+-----------+------+---------------------+---------+---------+--------+
    5. | 007369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800.00 | NULL | 20 |
    6. | 007499 | ALLEN | SALESMAN | 7698 | 1981-02-20 00:00:00 | 1600.00 | 300.00 | 30 |
    7. | 007521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250.00 | 500.00 | 30 |
    8. | 007566 | JONES | MANAGER | 7839 | 1981-04-02 00:00:00 | 2975.00 | NULL | 20 |
    9. | 007654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 | 30 |
    10. | 007698 | BLAKE | MANAGER | 7839 | 1981-05-01 00:00:00 | 2850.00 | NULL | 30 |
    11. | 007782 | CLARK | MANAGER | 7839 | 1981-06-09 00:00:00 | 2450.00 | NULL | 10 |
    12. | 007788 | SCOTT | ANALYST | 7566 | 1987-04-19 00:00:00 | 3000.00 | NULL | 20 |
    13. | 007839 | KING | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000.00 | NULL | 10 |
    14. | 007844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500.00 | 0.00 | 30 |
    15. | 007876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100.00 | NULL | 20 |
    16. | 007900 | JAMES | CLERK | 7698 | 1981-12-03 00:00:00 | 950.00 | NULL | 30 |
    17. | 007902 | FORD | ANALYST | 7566 | 1981-12-03 00:00:00 | 3000.00 | NULL | 20 |
    18. | 007934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300.00 | NULL | 10 |
    19. +--------+--------+-----------+------+---------------------+---------+---------+--------+
    20. 14 rows in set (0.00 sec)
    21. mysql> select deptno,avg(sal) 平均,min(sal) 最低 from emp group by deptno,job;
    22. +--------+-------------+---------+
    23. | deptno | 平均 | 最低 |
    24. +--------+-------------+---------+
    25. | 10 | 1300.000000 | 1300.00 |
    26. | 10 | 2450.000000 | 2450.00 |
    27. | 10 | 5000.000000 | 5000.00 |
    28. | 20 | 3000.000000 | 3000.00 |
    29. | 20 | 950.000000 | 800.00 |
    30. | 20 | 2975.000000 | 2975.00 |
    31. | 30 | 950.000000 | 950.00 |
    32. | 30 | 2850.000000 | 2850.00 |
    33. | 30 | 1400.000000 | 1250.00 |
    34. +--------+-------------+---------+
    35. 9 rows in set (0.00 sec)
    36. mysql> select deptno,job, avg(sal) 平均,min(sal) 最低 from emp group by deptno,job;
    37. +--------+-----------+-------------+---------+
    38. | deptno | job | 平均 | 最低 |
    39. +--------+-----------+-------------+---------+
    40. | 10 | CLERK | 1300.000000 | 1300.00 |
    41. | 10 | MANAGER | 2450.000000 | 2450.00 |
    42. | 10 | PRESIDENT | 5000.000000 | 5000.00 |
    43. | 20 | ANALYST | 3000.000000 | 3000.00 |
    44. | 20 | CLERK | 950.000000 | 800.00 |
    45. | 20 | MANAGER | 2975.000000 | 2975.00 |
    46. | 30 | CLERK | 950.000000 | 950.00 |
    47. | 30 | MANAGER | 2850.000000 | 2850.00 |
    48. | 30 | SALESMAN | 1400.000000 | 1250.00 |
    49. +--------+-----------+-------------+---------+
    50. 9 rows in set (0.01 sec)
    51. mysql> select ename,deptno,job, avg(sal) 平均,min(sal) 最低 from emp group by deptno,job;
    52. ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'scott.emp.ename' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
    53. mysql>

    显示平均工资低于2000的部门和它的平均工资

     
    
    1. mysql> select avg(sal) deptavg from emp group by deptno;
    2. +-------------+
    3. | deptavg |
    4. +-------------+
    5. | 2916.666667 |
    6. | 2175.000000 |
    7. | 1566.666667 |
    8. +-------------+
    9. 3 rows in set (0.00 sec)
    10. mysql> select deptno,avg(sal) deptavg from emp group by deptno;
    11. +--------+-------------+
    12. | deptno | deptavg |
    13. +--------+-------------+
    14. | 10 | 2916.666667 |
    15. | 20 | 2175.000000 |
    16. | 30 | 1566.666667 |
    17. +--------+-------------+
    18. 3 rows in set (0.00 sec)
    19. mysql> select deptno,avg(sal) deptavg from emp group by deptno having deptavg<2000;
    20. +--------+-------------+
    21. | deptno | deptavg |
    22. +--------+-------------+
    23. | 30 | 1566.666667 |
    24. +--------+-------------+
    25. 1 row in set (0.00 sec)
    26. mysql> select deptno,avg(sal) deptavg from emp group by deptno where deptavg<2000;
    27. ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where deptavg<2000' at line 1
    28. mysql> select *from emp having ename='SMITH';
    29. +--------+-------+-------+------+---------------------+--------+------+--------+
    30. | empno | ename | job | mgr | hiredate | sal | comm | deptno |
    31. +--------+-------+-------+------+---------------------+--------+------+--------+
    32. | 007369 | SMITH | CLERK | 7902 | 1980-12-17 00:00:00 | 800.00 | NULL | 20 |
    33. +--------+-------+-------+------+---------------------+--------+------+--------+
    34. 1 row in set (0.00 sec)
    35. mysql>

    (SMITH不参加统计)显示平均工资低于2000的部门和它的平均工资

     
    
    1. mysql> select deptno, job from emp where ename!='SMITH' group by deptno ,job;
    2. +--------+-----------+
    3. | deptno | job |
    4. +--------+-----------+
    5. | 10 | CLERK |
    6. | 10 | MANAGER |
    7. | 10 | PRESIDENT |
    8. | 20 | ANALYST |
    9. | 20 | CLERK |
    10. | 20 | MANAGER |
    11. | 30 | CLERK |
    12. | 30 | MANAGER |
    13. | 30 | SALESMAN |
    14. +--------+-----------+
    15. 9 rows in set (0.00 sec)
    16. mysql> select deptno, job ,max(sal) 最高,min(sal) 最低 from emp where ename!='SMITH' group by deptno ,job;
    17. +--------+-----------+---------+---------+
    18. | deptno | job | 最高 | 最低 |
    19. +--------+-----------+---------+---------+
    20. | 10 | CLERK | 1300.00 | 1300.00 |
    21. | 10 | MANAGER | 2450.00 | 2450.00 |
    22. | 10 | PRESIDENT | 5000.00 | 5000.00 |
    23. | 20 | ANALYST | 3000.00 | 3000.00 |
    24. | 20 | CLERK | 1100.00 | 1100.00 |
    25. | 20 | MANAGER | 2975.00 | 2975.00 |
    26. | 30 | CLERK | 950.00 | 950.00 |
    27. | 30 | MANAGER | 2850.00 | 2850.00 |
    28. | 30 | SALESMAN | 1600.00 | 1250.00 |
    29. +--------+-----------+---------+---------+
    30. 9 rows in set (0.00 sec)
    31. mysql> select deptno, job ,avg(sal) myavg from emp where ename!='SMITH' group by deptno ,job;
    32. +--------+-----------+-------------+
    33. | deptno | job | myavg |
    34. +--------+-----------+-------------+
    35. | 10 | CLERK | 1300.000000 |
    36. | 10 | MANAGER | 2450.000000 |
    37. | 10 | PRESIDENT | 5000.000000 |
    38. | 20 | ANALYST | 3000.000000 |
    39. | 20 | CLERK | 1100.000000 |
    40. | 20 | MANAGER | 2975.000000 |
    41. | 30 | CLERK | 950.000000 |
    42. | 30 | MANAGER | 2850.000000 |
    43. | 30 | SALESMAN | 1400.000000 |
    44. +--------+-----------+-------------+
    45. 9 rows in set (0.00 sec)
    46. mysql> select deptno, job ,avg(sal) myavg from emp where ename!='SMITH' group by deptno ,job having mysal<2000;
    47. ERROR 1054 (42S22): Unknown column 'mysal' in 'having clause'
    48. mysql> select deptno, job ,avg(sal) myavg from emp where ename!='SMITH' group by deptno ,job having myavg<2000;
    49. +--------+----------+-------------+
    50. | deptno | job | myavg |
    51. +--------+----------+-------------+
    52. | 10 | CLERK | 1300.000000 |
    53. | 20 | CLERK | 1100.000000 |
    54. | 30 | CLERK | 950.000000 |
    55. | 30 | SALESMAN | 1400.000000 |
    56. +--------+----------+-------------+
    57. 4 rows in set (0.00 sec)
    58. mysql>

    结尾

    最后,感谢您阅读我的文章,希望这些内容能够对您有所启发和帮助。如果您有任何问题或想要分享您的观点,请随时在评论区留言。

    同时,不要忘记订阅我的博客以获取更多有趣的内容。在未来的文章中,我将继续探讨这个话题的不同方面,为您呈现更多深度和见解。

    谢谢您的支持,期待与您在下一篇文章中再次相遇!

  • 相关阅读:
    jsp教师教学信息管理系统Myeclipse开发sqlserver数据库web结构java编程计算机网页项目
    Seata四大模式之XA模式详解及代码实现
    DNS域名解析
    C++ —— 二叉搜索树
    gprof 分析程序执行时间和函数调用次数
    在线问题反馈模块实战(十五)​:实现在线更新反馈状态功能
    【Spring Boot】单元测试
    GBase 8s典型安装
    传统机器学习笔记6——回归树模型
    leetcode347 前 K 个高频元素
  • 原文地址:https://blog.csdn.net/m0_74163972/article/details/136349843