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
    周二周三结果:字符串无法求出数字值

  • 相关阅读:
    洛谷P2569 (BZOJ1855)[SCOI2010]股票交易 【单调队列优化DP】
    洛谷 P2254 [NOI2005]瑰丽华尔兹(单调栈优化DP)
    CF372C Watching Fireworks is Fun(单调队列优化DP)
    2019牛客全国多校第八场A题 All-one Matrices(单调栈)
    HDU3896 Greatest TC(双联通分量+倍增)
    2019牛客多校第7场
    ZOJ 2112 Dynamic Rankings(树状数组+主席树)
    2019 杭电多校第六场 题解
    HDU2242 考研路茫茫——空调教室 (双联通分+树形DP)
    HDU5536 Chip Factory
  • 原文地址:https://www.cnblogs.com/idcode/p/14551361.html
Copyright © 2011-2022 走看看