侧边栏壁纸
博主头像
云BLOG 博主等级

行动起来,活在当下

  • 累计撰写 318 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
SQL

MySQL -- 行转列的两种方法

Administrator
2025-01-25 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

MySQL中行转列是很常用的,本文给出了两种行转列的方法。

两张表:

上表:product ,下:cate

11111.png22222.png

第一种方法:IF()语句

SELECT cid,
MAX(IF(mon ='一月份',num,0)) '一月份',
MAX(IF(mon ='二月份',num,0)) '二月份'
FROM product GROUP BY cid;

第二种方法:CASE  WHEN THEN  ELSE  END

SELECT cid,
MAX(CASE mon WHEN '一月份' THEN num ELSE 0 END) as '一月份',
MAX(CASE mon WHEN '二月份' THEN num ELSE 0 END) as '二月份'
FROM product GROUP BY cid;

当然也可以进行连表查询使用,如下SQL:

方法一:
SELECT c.pname ,
MAX(IF(mon ='一月份',num,0)) '一月份',
MAX(IF(mon ='二月份',num,0)) '二月份'
FROM cate c LEFT JOIN product p ON c.id = p.cid GROUP BY c.id;
方法二:
SELECT c.pname ,
MAX(CASE mon WHEN '一月份' THEN num ELSE 0 END) as '一月份',
MAX(CASE mon WHEN '二月份' THEN num ELSE 0 END) as '二月份'
FROM cate c LEFT JOIN product p ON c.id = p.cid GROUP BY c.id

需要说明的地方:

方法二中的MAX()是为了能够使用GROUP BY根据cid进行分组,因为每一个cd对应的 mon ='一月份' 的记录只有一条,所以MAX()的值就等于对应那一条记录的num的值。

假如cid='1' 和 mon ='一月份' 的记录有两条,则此时MAX() 的值将会是这两条记录中的最大的值,同理,使用SUM()就是求两者的和。因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函数都可以达到行转列的效果。

0

评论区