• Mysql的三维查询结果


    case when 和聚合函数使用

    
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for test
    -- ----------------------------
    DROP TABLE IF EXISTS `test`;
    CREATE TABLE `test`  (
      `课节` int(255) NULL DEFAULT NULL,
      `星期` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      `课程名` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL
    ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of test
    -- ----------------------------
    INSERT INTO `test` VALUES (1, '1', '数学');
    INSERT INTO `test` VALUES (2, '1', '英语');
    INSERT INTO `test` VALUES (1, '2', '计算机');
    INSERT INTO `test` VALUES (2, '2', '数学');
    INSERT INTO `test` VALUES (1, '3', '计算机');
    INSERT INTO `test` VALUES (2, '3', '语文');
    
    SET FOREIGN_KEY_CHECKS = 1;
    
    
    select 课节,
    max(case 星期 WHEN 1 THEN 课程名 ELSE "" end) as 周一,
    max(case 星期 WHEN 2 THEN 课程名 ELSE "" end) as 周二,
    max(case 星期 WHEN 3 THEN 课程名 ELSE "" end) as 周三
    from test GROUP BY 课节
    

    原表数据:
    在这里插入图片描述
    分析:

    不进行分组:

    在这里插入图片描述

    每条记录根据星期来确定 周一 、周二、周三的课程名 如果没有满足when条件的就是else
    这里else 可以为 空

    采用max聚合分组

    在这里插入图片描述

    小结论:

    1. 先进行case进行查询结果 在进行分组 聚合查询
    2. 查询结果如上图 未分组之前数据
    3. 进行分组 分组后课节为1,2
    4. 进行课节1 的聚合max查询

    这里使用max查询 注意看不进行分组时的图 因为是max取最大值 空字符数学英语这类要小所以结果会这样

    采用min 聚合函数:

    在这里插入图片描述

    看周一的默认最小值为111111因为字符串111111数学语文这一类要小
    周二周三 因为数据没分组之前有空串所以 空串是最小的

    count聚合函数

    在这里插入图片描述

    求记录个数 跟内容无关了
    所以转化为三维表 用不到这个

    avg聚合

    在这里插入图片描述

    周一结果:1111112
    还是参考未分组之前的图 111111
    2/3=74074平均值 :2是有2个值为111111的3 课节为1个记录数有3个
    周二周三结果:字符串无法求出数字值
    这个条件需要根据业务需求来确定是否使用

    sum聚合

    在这里插入图片描述

    参考未分组之前的图
    周一结果:111111*2
    周二周三结果:字符串无法求出数字值

  • 相关阅读:
    Oracle client 安装、配置
    js 计算金额是否小于总金额,大于是不能保存
    SQL Server函数与存储过程 计算时间
    sql Server 创建临时表 嵌套循环 添加数据
    SQL Server 事务日志文件已满,收缩日志文件(9002)
    sql Server 2008 数据库自动备份维护计划
    面向对象的三个基本特征:继承、封装、多肽
    MySQL 语句调优
    SQL 多表关联更新
    值类型、引用类型
  • 原文地址:https://www.cnblogs.com/idcode/p/14551361.html
Copyright © 2020-2023  润新知