数据库 mysql数据库 group by详解

川长思鸟来 2023-01-11 03:37 223阅读 0赞

数据库 mysql数据库 group by having详解

  • 数据库 mysql数据库 group by having详解
    • 一、概念
    • 二、语法结构
    • 三、验证案例

数据库 mysql数据库 group by having详解

一、概念

  1. group by 字段分组,以哪个字段分组就是以哪个字段作为唯一值进行分组,多个字段同样道理。
  2. having相当于是分组后的条件语句。

二、语法结构

  1. select 字段 from 表名 where 条件 group by 字段
  2. select 字段 from 表名 group by 字段 having 过滤条件
  3. 注意:对于过滤条件,可以先用where,再用group by或者是先用group by,再用having

三、验证案例

  1. -- 创建员工表
  2. CREATE TABLE `tab_employee` (
  3. `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  4. `num` VARCHAR(2) DEFAULT NULL COMMENT '统计',
  5. `name` VARCHAR(255) DEFAULT NULL COMMENT '姓名',
  6. `grade` VARCHAR(30) DEFAULT NULL COMMENT '级别',
  7. `salary` VARCHAR(30) DEFAULT NULL COMMENT '薪资',
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '员工信息表';
  10. -- 查询表
  11. SELECT * FROM tab_employee;
  12. -- 删除表
  13. DROP TABLE tab_employee;
  14. -- 删除数据
  15. DELETE FROM tab_employee;
  16. INSERT INTO tab_employee(num,NAME,grade,salary) VALUES('1','张三','A',1500);
  17. INSERT INTO tab_employee(num,NAME,grade,salary) VALUES('1','张三','A',2000);
  18. INSERT INTO tab_employee(num,NAME,grade,salary) VALUES('1','张三','B',1500);
  19. INSERT INTO tab_employee(num,NAME,grade,salary) VALUES('1','李四','A',1500);
  20. INSERT INTO tab_employee(num,NAME,grade,salary) VALUES('1','李四','B',2000);
  21. INSERT INTO tab_employee(num,NAME,grade,salary) VALUES('1','王五','A',1500);
  22. INSERT INTO tab_employee(num,NAME,grade,salary) VALUES('1','赵六','C',1500);
  23. INSERT INTO tab_employee(num,NAME,grade,salary) VALUES('1','田七','D',1500);
  24. -- 查询表
  25. SELECT * FROM tab_employee;
  26. -- AABA BACD
  27. SELECT grade FROM tab_employee;
  28. -- 按照姓名分组
  29. SELECT COUNT(num),NAME FROM tab_employee GROUP BY NAME;
  30. -- 按照级别分组
  31. SELECT COUNT(num),grade FROM tab_employee GROUP BY grade;
  32. -- 按照姓名与级别分组,把NAME,grade这列看做一个整体
  33. SELECT COUNT(num),NAME,grade FROM tab_employee GROUP BY NAME,grade;
  34. -- 按照级别与姓名分组,把grade,NAME这列看做一个整体,与上边区别是分组字段顺序颠倒
  35. SELECT COUNT(num),NAME,grade FROM tab_employee GROUP BY grade,NAME;
  36. -- 配合聚合函数一起使用
  37. -- 常用的聚合函数:count() , sum() , avg() , max() , min()
  38. -- count():计数,查看表中相同人名的个数
  39. SELECT COUNT(num),NAME FROM tab_employee GROUP BY NAME;
  40. -- sum():求和, 查看表中人员的工资和(同姓的工资相加)
  41. SELECT SUM(salary),NAME FROM tab_employee GROUP BY NAME;
  42. -- avg():平均数, 查看表中人员的工资平均数(同姓工资平均数)
  43. SELECT NAME,AVG(salary) FROM tab_employee GROUP BY NAME,grade;
  44. -- 姓名与级别确定一个人,所以会有两个张三都是1500
  45. SELECT NAME,grade,AVG(salary) FROM tab_employee GROUP BY NAME,grade;
  46. -- max():最大值, 查看按等级划分人员工资最大值
  47. SELECT grade, MAX(salary) FROM tab_employee GROUP BY grade;
  48. SELECT NAME,grade, MAX(salary) FROM tab_employee GROUP BY grade,NAME;
  49. -- min():最小值, 查看按等级划分人员工资最小值
  50. SELECT NAME,grade, MIN(salary) FROM tab_employee GROUP BY grade, NAME;
  51. -- having相当于条件
  52. SELECT COUNT(num),NAME FROM tab_employee GROUP BY NAME;
  53. SELECT COUNT(num),NAME FROM tab_employee GROUP BY NAME HAVING COUNT(num) > 1;

发表评论

表情:
评论列表 (有 0 条评论,223人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL GROUP BY

    1. 只会返回分组后的一条结果,但是实际上里面含有的结果不仅有一条 \\![加粗样式][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow

    相关 mysql group by order by

    这两天让一个数据查询难了。主要是对group by 理解的不够深入。才出现这样的情况 这种需求,我想很多人都遇到过。下面是我模拟我的内容表 复制代码 代码如下: