• mysql的行转列和列转行


    行转列


    如图所示的表,现在希望查询的结果将行转成列

    建表语句如下:

    CREATE TABLE `test_grade` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `user_name` varchar(20) DEFAULT NULL,
    `course` varchar(20) DEFAULT NULL,
    `score` float DEFAULT '0',
    PRIMARY KEY (`ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    
    insert into grade(`user_name`, `course`, `score`)  VALUES
    ("张三","数学",34),
    ("张三", "语文", 58),
    ("张三", "英语", 58),
    ("李四", "数学", 45),
    ("李四", "语文", 87),
    ("李四", "英语", 45),
    ("王五", "数学", 76),
    ("王五", "语文", 34),
    ("王五", "英语", 89);
    

    查询语句:
    此处用之所以用MAX是为了将无数据的点设为0,防止出现NULL

    SELECT user_name ,
     MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学,
     MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文,
     MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语
    FROM grade
    GROUP BY user_name;
    

    结果展示:
    image

    列转行


    如图所示的表,现在希望查询的结果将列成行
    image

    建表语句如下:

    CREATE TABLE `grade` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `user_name` varchar(20) DEFAULT NULL,
    `cn_score` float DEFAULT NULL,
    `math_score` float DEFAULT NULL,
    `en_score` float DEFAULT '0',
    PRIMARY KEY (`ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    
    insert into grade(`user_name`, `cn_score`,`math_score` ,`en_score` ) values
    ("张三", 34, 58, 58),
    ("李四", 45, 87, 45),
    ("王五", 76, 34, 89);
    

    查询语句:

    select user_name, '语文' COURSE , CN_SCORE as SCORE from grade
    union select user_name, '数学' COURSE, MATH_SCORE as SCORE from grade
    union select user_name, '英语' COURSE, EN_SCORE as SCORE from grade
    order by user_name,COURSE;
    

    结果展示:
    image

  • 相关阅读:
    python-scapy学习笔记-(1)
    python系统性能模块笔记
    Python爬虫总结
    pm2的的常用命令及用法
    Javascript的map与forEach的区别
    对MVVM思想的在认识
    RN的打包
    undefined与null的区别
    rem与em的区别
    JS的函数参数传递为值传递
  • 原文地址:https://www.cnblogs.com/mengzhao/p/16086759.html
Copyright © 2020-2023  润新知