加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql实例mysql 行列动态转换的实现(列联表,交叉表)

发布时间:2020-12-12 01:30:33 所属栏目:MySql教程 来源:网络整理
导读:《Mysql实例mysql 行列动态转换的实现(列联表,交叉表)》要点: 本文介绍了Mysql实例mysql 行列动态转换的实现(列联表,交叉表),希望对您有用。如果有疑问,可以联系我们。 MYSQL入门 (1)动态,适用于列不确定情况 MYSQL入门 create table table_name( id int

《Mysql实例mysql 行列动态转换的实现(列联表,交叉表)》要点:
本文介绍了Mysql实例mysql 行列动态转换的实现(列联表,交叉表),希望对您有用。如果有疑问,可以联系我们。

MYSQL入门(1)动态,适用于列不确定情况

MYSQL入门
create table table_name(
 id int primary key,col1 char(2),col2 char(2),col3 int
);
MYSQL入门
insert into table_name values
(1,'A1','B1',9),(2,'A2',7),(3,'A3',4),(4,'A4',2),(5,'B2',(6,(7,8),(8,5),(9,'B3',1),(10,(11,(12,6),(13,'B4',(14,(15,(16,(17,3),(18,(19,(20,5);
MYSQL入门
select * from table_name;
+----+------+------+------+
| id | col1 | col2 | col3 |
+----+------+------+------+
| 1 | A1  | B1  |  9 |
| 2 | A2  | B1  |  7 |
| 3 | A3  | B1  |  4 |
| 4 | A4  | B1  |  2 |
| 5 | A1  | B2  |  2 |
| 6 | A2  | B2  |  9 |
| 7 | A3  | B2  |  8 |
| 8 | A4  | B2  |  5 |
| 9 | A1  | B3  |  1 |
| 10 | A2  | B3  |  8 |
| 11 | A3  | B3  |  8 |
| 12 | A4  | B3  |  6 |
| 13 | A1  | B4  |  8 |
| 14 | A2  | B4  |  2 |
| 15 | A3  | B4  |  6 |
| 16 | A4  | B4  |  9 |
| 17 | A1  | B4  |  3 |
| 18 | A2  | B4  |  5 |
| 19 | A3  | B4  |  2 |
| 20 | A4  | B4  |  5 |
+----+------+------+------+
MYSQL入门
SET @EE='';
SELECT @EE:=CONCAT(@EE,'SUM(IF(col2='',col2,''',',col3,0)) AS ',') FROM (SELECT DISTINCT col2 FROM table_name) A;
SET @QQ=CONCAT('SELECT ifnull(col1,'total') AS columnA,LEFT(@EE,LENGTH(@EE)-1),SUM(col3) AS TOTAL FROM table_name GROUP BY col1 WITH ROLLUP');
PREPARE stmt2 FROM @QQ;
EXECUTE stmt2;
MYSQL入门
+---------+------+------+------+------+-------+
| columnA | B1  | B2  | B3  | B4  | TOTAL |
+---------+------+------+------+------+-------+
| A1   |  9 |  2 |  1 |  11 |  23 |
| A2   |  7 |  9 |  8 |  7 |  31 |
| A3   |  4 |  8 |  8 |  8 |  28 |
| A4   |  2 |  5 |  6 |  14 |  27 |
| total  |  22 |  24 |  23 |  40 |  109 |
+---------+------+------+------+------+-------+

MYSQL入门(2)第二个字段确定的情况下使用

MYSQL入门
SELECT
  IFNULL(col1,'total') AS total,SUM(IF(col2='B1',0)) AS B1,SUM(IF(col2='B2',0)) AS B2,SUM(IF(col2='B3',0)) AS B3,SUM(IF(col2='B4',0)) AS B4,SUM(IF(col2='total',0)) AS total
 FROM (
  SELECT col1,IFNULL(col2,'total') AS col2,SUM(col3) AS col3
  FROM table_name
  GROUP BY col1,col2
  WITH ROLLUP
  HAVING col1 IS NOT NULL
 ) AS A
 GROUP BY col1
 WITH ROLLUP;

MYSQL入门注: WITH ROLLUP 用于列上求和; SUM(IF(col2='total',0)) AS total 用于行上求和.

MYSQL入门(3)第二个字段确定的情况下使用

MYSQL入门
select ifnull(col1,'total') AS col1,sum(if(col2='B1',sum(if(col2='B2',sum(if(col2='B3',sum(if(col2='B4',SUM(col3) AS TOTAL
 from table_name
 group by col1 with rollup ;

MYSQL入门以上这篇mysql 行列动态转换的实现(列联表,交叉表)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家PHP.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读