美文网首页
mysql高级查询-行列互转

mysql高级查询-行列互转

作者: gurlan | 来源:发表于2024-06-07 16:08 被阅读0次

行转列

题目1

image.png
CREATE TABLE students_scores (
    id INT AUTO_INCREMENT,
    name VARCHAR(50),
    subject VARCHAR(50),
    score INT,
    PRIMARY KEY(id)
);
INSERT INTO students_scores (name, subject, score) VALUES
('张三', '语文', 78),
('张三', '数学', 88),
('张三', '英语', 98),
('李四', '语文', 89),
('李四', '数学', 76),
('李四', '英语', 90),
('王五', '语文', 99),
('王五', '数学', 66),
('王五', '英语', 91);
select name, sum(语文) as 语文, sum(数学) as 数学, sum(英语) as 英语

from (select *,
             case students_scores.subject when "语文" then students_scores.score else 0 end as 语文,
             case students_scores.subject when "数学" then students_scores.score else 0 end as 数学,
             case students_scores.subject when "英语" then students_scores.score else 0 end as 英语

      from students_scores) as ss
group by name;


select name,
       sum(case students_scores.subject when "语文" then students_scores.score else 0 end) as 语文,
       sum(case students_scores.subject when "数学" then students_scores.score else 0 end) as 数学,
       sum(case students_scores.subject when "英语" then students_scores.score else 0 end) as 英语

from students_scores
group by name

解题步骤

  1. 确定分组列,转换列,数据列
  2. 生成伪列
  3. 做分组查询
  4. 选择合适的聚合函数

题目2

image.png

select results.ddate,
    count( case results.result when '胜' then 1 else null end )  as 胜,
       count(  case results.result when '负' then 1 else null end ) as 负
from results

group by  ddate

select results.ddate,
    sum( case results.result when '胜' then 1 else 0 end )  as 胜,
       sum(  case results.result when '负' then 1 else 0 end ) as 负
from results

group by  ddate

行转列

image.png
select  name, '语文' as subject, 语文 as  score from  students_scores2
union  all
select  name, '数学' as subject, 数学 as  score from  students_scores2
union  all
select  name, '英文' as subject, 英语 as  score from  students_scores2
order by  name

相关文章

  • MySQL行列互转,合计

    1.mysql行转列将原本同一列下多行的不同内容作为多个字段,输出对应内容。 注意点: (1)SUM() 是为了能...

  • 行列互转

  • MySQL高级查询

    layout: posttitle: "MySQL高级查询"date: 2016-06-02 11:14:38 +...

  • MySQL高级查询

    COUNT 在面试过程中遇到了这样一个SQL问题,学生表S(sid,Sname)、课程表C(cid,Cname)、...

  • MySQL 高级查询

    我们使用SQL查询不能只使用很简单、最基础的SELECT语句查询。如果想从多个表查询比较复杂的信息,就会使用高级查...

  • Mysql (高级查询)

    @作者 Stone的博客 www.1314sl.com @作者 Stone的博客 www.1314sl.com...

  • Mysql高级查询

    子查询 代码:select * from tableName where id in(select id from...

  • MySQL~高级查询

    一、多表查询 1、内连接查询 内连接通过在查询中设置连接条件的方式,来移除查询结果集中某些数据行后的交叉连接。简单...

  • MySQL高级查询

    为了便于说明下文中的例子,首先创建如下三张表: 子查询 子查询可以把一个查询嵌套在另一个查询当中的查询。 子查询一...

  • 找工作必备技能

    基础知识Java和JQuery SpringMVC 源码学习-入门 Mysql存储过程,Mysql高级查询相关SQ...

网友评论

      本文标题:mysql高级查询-行列互转

      本文链接:https://www.haomeiwen.com/subject/kmwmqjtx.html