https://www.modb.pro/db/75127 案例一是两个表之间的操作 案例二是单表操作

    案例一:查询所有学生的课程及分数情况
    分析,课程与分数情况,用到学生表及成绩表,两张表都是一维表,将其转化为右图所示的二维表

    结果:
    image.png
    第一步:将两张表格连接为一张表格

    1. SELECT stu.*,c_id,score
    2. FROM stu
    3. LEFT JOIN sc ON stu.s_id=sc.s_id;

    第二步,将上面得到的结果转换为二维表

    1. SELECT stu.s_id,stu.s_name,
    2. SUM(if(c_id='01',score,0)) '01',
    3. SUM(if(c_id='02',score,0)) '02',
    4. SUM(if(c_id='03',score,0)) '03'
    5. FROM stu
    6. LEFT JOIN sc ON stu.s_id=sc.s_id
    7. GROUP BY stu.s_id;
    1. SELECT stu.s_id,stu.s_name,
    2. SUM(CASE WHEN c_id='01' THEN score ELSE 0 END) '01',
    3. SUM(CASE WHEN c_id='02' THEN score ELSE 0 END) '02',
    4. SUM(CASE WHEN c_id='03' THEN score ELSE 0 END) '03'
    5. FROM stu
    6. LEFT JOIN sc ON stu.s_id=sc.s_id
    7. GROUP BY stu.s_id;
    8. SELECT stu.s_id,stu.s_name,
    9. SUM((c_id='01')*score) '01',
    10. SUM((c_id='02')*score) '02',
    11. SUM((c_id='03')*score) '03'
    12. FROM stu
    13. LEFT JOIN sc ON stu.s_id=sc.s_id
    14. GROUP BY stu.s_id;

    案例二:把包含柜号、类型、文件路径的一维表转为二维表,按类型

    1. SELECT
    2. `柜号` AS `柜号`,
    3. group_concat(DISTINCT case when `类型`="报关" then `文件路径` else NULL end SEPARATOR '|' ) AS `报关_文件路径`,
    4. group_concat(DISTINCT case when `类型`="检疫" then `文件路径` else NULL end SEPARATOR '|' ) AS `检疫_文件路径`,
    5. group_concat(DISTINCT case when `类型`="消杀" then `文件路径` else NULL end SEPARATOR '|' ) AS `消杀_文件路径`,
    6. group_concat(DISTINCT case when `类型`="核酸" then `文件路径` else NULL end SEPARATOR '|' ) AS `核酸_文件路径`
    7. FROM
    8. `ccsy_certificate`
    9. GROUP BY
    10. `柜号`

    案例三
    题目:以下是每个学生成绩,我想知道每位学生的每科成绩,而且每个学生的全部成绩排成一行,这样方便我查看、统计,导出数据,请用sql实现。

    1. CREATE TABLE stu_scores (UserName VARCHAR(20),Subject VARCHAR(30),Score FLOAT);
    2. INSERT INTO stu_scores SELECT 'Nick', '语文', 80;
    3. INSERT INTO stu_scores SELECT 'Nick', '数学', 90;
    4. INSERT INTO stu_scores SELECT 'Nick', '英语', 70;
    5. INSERT INTO stu_scores SELECT 'Nick', '生物', 85;
    6. INSERT INTO stu_scores SELECT 'Kent', '语文', 80;
    7. INSERT INTO stu_scores SELECT 'Kent', '数学', 90;
    8. INSERT INTO stu_scores SELECT 'Kent', '英语', 70;
    9. INSERT INTO stu_scores SELECT 'Kent', '生物', 85;
    10. -- 一维表转二维表
    11. select UserName,sum(if(Subject='语文',Score,0)) '语文',sum(if(Subject='数学',Score,0)) '数学',sum(if(Subject='英语',Score,0)) '英语',sum(if(Subject='生物',Score,0)) '生物' from stu_scores group by UserName;