列转行:利用max(case when then)

MySQL -- 行转列 -- GROUP_CONCAT --  MAX(CASE WHEN THEN)

 

SELECT
    `name`,
    MAX(
        CASE 
        WHEN  course='语文' THEN
            score
        END
    ) AS 语文,
    MAX(
        CASE 
        WHEN course='数学' THEN
            score
        END
    ) AS 数学, 
    MAX(
        CASE 
        WHEN course='英语' THEN
            score
        END
    ) AS 英语
FROM
    student
GROUP BY `name`
;

 MySQL -- 行转列 -- GROUP_CONCAT --  MAX(CASE WHEN THEN)

合并字段显示:利用group_cancat(course,”:”,”score”)

SELECT
    `name`,
    GROUP_CONCAT(course, ":", score) AS 成绩
FROM
    student
GROUP BY
    `name`;

MySQL -- 行转列 -- GROUP_CONCAT --  MAX(CASE WHEN THEN)

 -- -- -- -- -- -- -- --- - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --- - -- -- -- -- -- -- -- -- -- -- -- -- -

-- 合并字段显示 : 去重、排序
SELECT rid,GROUP_CONCAT(DISTINCT gid ORDER BY gid)
FROM gt_lighting.res_lights
GROUP BY rid;

MySQL -- 行转列 -- GROUP_CONCAT --  MAX(CASE WHEN THEN)

 

-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

多来点面试题:

MySQL -- 行转列 -- GROUP_CONCAT --  MAX(CASE WHEN THEN)

计算各班级及格人数:

    SELECT class,SUM(CASE WHEN score >= 60 THEN 1 END) AS '及格',SUM(CASE WHEN score < 60 THEN 1 END) AS '不及格'
    FROM gradeTable
    GROUP BY class;

或者:

    SELECT succ.class,succ.su AS '及格',fail.fa AS '不及格' FROM 
    (
    SELECT class,COUNT(1) AS su
    FROM gradeTable
    WHERE score >= 60
    GROUP BY class
    ) AS succ,
    (
    SELECT class,COUNT(1) AS fa
    FROM gradeTable
    WHERE score < 60
    GROUP BY class
    ) AS fail
    WHERE succ.class = fail.class;

Console : 

MySQL -- 行转列 -- GROUP_CONCAT --  MAX(CASE WHEN THEN)

啦啦啦

 

 

啦啦啦

相关文章:

  • 2021-07-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-19
  • 2021-12-10
猜你喜欢
  • 2021-11-27
  • 2022-12-23
  • 2021-06-28
  • 2021-10-29
  • 2022-01-08
  • 2022-12-23
相关资源
相似解决方案