zoukankan      html  css  js  c++  java
  • 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
    周二周三结果:字符串无法求出数字值

  • 相关阅读:
    app测试的一些较为重要的测试点
    adb工作常用命令
    vue中$attrs $listeners你会用吗?
    Vue中组件通信的常用方式
    Vue中watch 的用法
    VUE中使用 async await 将 axios 异步请求同步化处理
    安装spyder记录
    树莓CM3开机连接WIFI
    树莓派搭建seafile服务器备忘
    关于JAVA数据结构_线性表(通过单向链表实现)的学习
  • 原文地址:https://www.cnblogs.com/idcode/p/14551361.html
Copyright © 2011-2022 走看看