-
2021-08-27 20:46:23
SELECT GROUP_CONCAT( NAME ) FROM t_tag
GROUP_CONCAT 以逗号进行分割
更多相关内容 -
mysql 列转行,合并字段的方法(必看)
2020-12-16 04:51:46列转行:利用max(case when then) max—聚合函数 取最大值 (case course when ‘语文’ then score else 0 end) —判断 as 语文—别名作为列名 SELECT `name`, MAX( CASE WHEN course='\u8bed\u6587' THEN ... -
mysql 列转行的技巧(分享)
2020-09-09 18:23:37下面小编就为大家带来一篇mysql 列转行的技巧(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
mysql列转行以及年月分组实例
2021-01-19 23:07:58如下所示: SELECT count(DISTINCT(a.rect_id)) zcount, a.job_dept, DATE_FORMAT(submit_date, '%Y-%m') zsubmit_date FROM 表名 a WHERE a.statu = 3 AND a.rstatu = 2 AND a.job_dept IN ('19', '... -
mysql 列转行
2021-10-27 16:00:59mysql 列转行 select * from tablename 得出数据为 字段为attr1,attr2,attr3等,现在想把列转行,要这种结果: sql语句: 可以使用information_schema.COLUMNS 来查询出表的字段名字。这样 select COLUMN_NAME ...mysql 列转行
select * from tablename
得出数据为
字段为attr1,attr2,attr3等,现在想把列转行,要这种结果:
sql语句:
可以使用information_schema.COLUMNS 来查询出表的字段名字。这样select COLUMN_NAME clouname, ( case col.COLUMN_NAME when 'attr1' then zu.attr1 when 'attr2' then zu.attr2 when 'attr3' then zu.attr3 when 'attr4' then zu.attr4 when 'attr5' then zu.attr5 when 'attr6' then zu.attr6 end) 'value' from information_schema.COLUMNS col, zujianduibitest1 zu where col.TABLE_NAME = 'table_name' and zu.attr1 = '条件的值';
-
MySQL列转行
2022-06-17 08:35:40mysql列转行一、行转列
废话不多说,先上SQL(两种方式):– 行转列:方法①
SELECT
id,
name,
GROUP_CONCAT(CASE WHEN subject = ‘语文’ THEN score END SEPARATOR ‘’) ‘语文’,
GROUP_CONCAT(CASE WHEN subject = ‘数学’ THEN score END SEPARATOR ‘’) ‘数学’,
GROUP_CONCAT(CASE WHEN subject = ‘英语’ THEN score END SEPARATOR ‘’) ‘英语’
FROM test1
GROUP BY name;
– 行转列:方法②
SELECT
id,
name,
SUM(IF(subject = ‘语文’,score,0)) AS ‘语文’,
SUM(IF(subject = ‘数学’,score,0)) AS ‘数学’,
SUM(IF(subject = ‘英语’,score,0)) AS ‘英语’
FROM test1
GROUP BY name;效果如下:
这里方法②也可以使用GROUP_CONCAT的方式,两种方法的效果一样。**二、列转行
废话不多说,先上SQL:– 列转行
SELECT name,‘语文’ AS subject,语文 AS score FROM test2
UNION ALL
SELECT name,‘数学’ AS subject,数学 AS score FROM test2
UNION ALL
SELECT name,‘英语’ AS subject,英语 AS score FROM test2
ORDER BY name ASC,subject DESC;效果如下:
总结:
行转列主要借助:CASE WHEN或IF,这两种都是判断条件,思路>当满足某个学科的时候我们把它当做新的一列。
列转行主要借助:UNION或UNION ALL,这两个都是把结果集合并起来,思路> 每次查询学生名称(基本列)和学科的其中一列的值,再把它们组合起来,这样你的结果集就是只有学生名称和科目成绩两列了。(我这里多加了一列科目)
附上建表语句:
CREATE TABLE
test1
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(30) DEFAULT NULL COMMENT ‘学生名称’,
subject
varchar(30) DEFAULT NULL COMMENT ‘科目名称’,
score
decimal(5,1) DEFAULT NULL COMMENT ‘分数’,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;CREATE TABLE
test2
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(30) DEFAULT NULL COMMENT ‘学生名称’,
语文
decimal(5,1) DEFAULT NULL COMMENT ‘语文科目分数’,
数学
decimal(5,1) DEFAULT NULL COMMENT ‘数学科目分数’,
英语
decimal(5,1) DEFAULT NULL COMMENT ‘英语科目分数’,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;文章转自:https://blog.csdn.net/liuquanfeng92/article/details/107763994
-
mysql列转行的技巧(分享)
2021-01-20 00:33:47这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果。表数据:IDValue1tiny,small,big2small,medium3tiny,big期望得到结果:IDValue1tiny1small1big2small2medium3tiny3big正文...前言:
由于很多业务表因为历史原因或者性能原因,都使用了违反第一范式的设计模式。即同一个列中存储了多个属性值(具体结构见下表)。
这种模式下,应用常常需要将这个列依据分隔符进行分割,并得到列转行的结果。
表数据:
ID
Value
1
tiny,small,big
2
small,medium
3
tiny,big
期望得到结果:
ID
Value
1
tiny
1
small
1
big
2
small
2
medium
3
tiny
3
big
正文:
#需要处理的表
create table tbl_name (ID int ,mSize varchar(100));
insert into tbl_name values (1,'tiny,small,big');
insert into tbl_name values (2,'small,medium');
insert into tbl_name values (3,'tiny,big');
#用于循环的自增表
create table incre_table (AutoIncreID int);
insert into incre_table values (1);
insert into incre_table values (2);
insert into incre_table values (3);
select a.ID,substring_index(substring_index(a.mSize,',',b.AutoIncreID),',',-1)
from
tbl_name a
join
incre_table b
on b.AutoIncreID <= (length(a.mSize) - length(replace(a.mSize,',',''))+1)
order by a.ID;
原理分析:
这个join最基本原理是笛卡尔积。通过这个方式来实现循环。
以下是具体问题分析:
length(a.Size) - length(replace(a.mSize,',',''))+1 表示了,按照逗号分割后,改列拥有的数值数量,下面简称n
join过程的伪代码:
根据ID进行循环
{
判断:i 是否 <= n
{
获取最靠近第 i 个逗号之前的数据, 即 substring_index(substring_index(a.mSize,',',b.ID),',',-1)
i = i +1
}
ID = ID +1
}
总结:
这种方法的缺点在于,我们需要一个拥有连续数列的独立表(这里是incre_table)。并且连续数列的最大值一定要大于符合分割的值的个数。
例如有一行的mSize 有100个逗号分割的值,那么我们的incre_table 就需要有至少100个连续行。
当然,mysql内部也有现成的连续数列表可用。如mysql.help_topic: help_topic_id 共有504个数值,一般能满足于大部分需求了。
改写后如下:
select a.ID,substring_index(substring_index(a.mSize,',',b.help_topic_id+1),',',-1)
from
tbl_name a
join
mysql.help_topic b
on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,',',''))+1)
order by a.ID;
以上这篇mysql 列转行的技巧(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:mysql 行转列和列转行实例详解
mysql 列转行,合并字段的方法(必看)
mssql 数据库表行转列,列转行终极方案
SQL行转列和列转行代码详解
SQL行转列、列转行的简单实现
mysql列转行以及年月分组实例
SQL知识点之列转行Unpivot函数
-
MySQL列转行(group_concat函数)
2021-12-16 22:33:46在MySQL中,如何将列转成一行?比如一个一个商品会属于多个分类(如华为手机可以是手机分类,也可以是数码分类),如何将此商品在一条数据中展现所有分类。 思路很简单,通过MySQL函数group_concat即可解决。 创建测试... -
mysql列转行以及年月分组_MySQL
2021-04-19 09:11:07bitsCN.commysql列转行以及年月分组Java代码SELECT count(DISTINCT(a.rect_id)) zcount, a.job_dept, DATE_FORMAT(submit_date, '%Y-%m') zsubmit_date FROM 表名 a WHERE a.statu = 3 AND... -
Mysql 列转行统计查询 、行转列统计查询
2021-01-19 00:58:32concat函数列转行,与行转列例一: SELECT num from user 1.使用group_concat函数得到列转行 select group_concat(num) from user 2.使用SUBSTRING_IN ...【转】MySQL存储过程中使用动态行转列MySQL存储过程中使用... -
MySQL 列转行用法实现
2019-09-30 22:48:57需求 需要将如下所示原始表数据转为结构化的数据按行显示: 转为结构化数据: ...如果是单条记录通过SUBSTRING_INDEX容易实现,SQL语句如下: ...Mysql group_concat的反向应用实现(Mysql列转行) -
mysql列转行(列值不确定
2021-01-19 03:30:13tag40 | +------------+-------+-------+-------+-------+-------+ 我的思路: 1、把行的转换成列: +------------+-------+-------+-------+----| | a | b1 | +------------+-------+-------+-------+----| | 2011-... -
mysql列转行(行用字符串连接
2021-11-13 13:35:00mysql列转行(行用字符串连接) 原来的数据 转换后的 SELECT user_Id,GROUP_CONCAT(POST_CODE)AS POST_CODE FROM rh_persion_post GROUP BY user_Id SELECT user_Id,GROUP_CONCAT(POST_CODE)AS POST_CODE FROM rh... -
mysql 列转行 并进行json截取(mysql 5.6)
2021-01-19 01:50:23file,@fild, t2.num_rn + 1), @fild, -1) as result --列转行 FROM(SELECT 1 asid ,'[{"val":4,"area":"floor","setVal":null,"isExceed":false,"isQualified":true},{"val":11,"area":"floor","setVal":null,... -
Mysql 行转列,列转行 SQL语句和示例表结构SQL
2018-04-09 10:10:17Mysql 行转列,列转行 SQL语句和示例表结构SQL Mysql 行转列,列转行 SQL语句和示例表结构SQL -
数据库列转行实例—Mysql列转行-序列表方法
2021-01-19 12:43:10此时可以看到【mobile】列的数据后面都添加了一个逗号, 【size】列是【mobile】原数据总长度,减去去掉逗号的原数据,加1的长度。 【REPLACE(mobile,’,’,’’)】列是【mobile】列原数据把逗号替换为空的数据。 ... -
MYSQL列转行
2021-05-07 16:12:35SELECT YEAR , MAX( IF ( c.MONTH = '1', c.count, 0 )) AS 'm1', MAX( IF ( c.MONTH = '2', c.count, 0 )) AS 'm2', MAX( IF ( c.MONTH = '3', c.count, 0 )) AS 'm3', ... ( c.MONTH = '4', c.count, 0 )) ... -
在mybatis项目中实现mysql列转行
2021-03-03 17:20:16KEY `form_group_id` (`form_group_id`) ) 1、初始效果 2、行转列效果 3、最终列合并效果 sql实现 select #列合并 GROUP_CONCAT(changeContext SEPARATOR '') changeContext, GROUP_CONCAT(changeBefore SEPARATOR... -
mysql 列转行、列转行的有关问题_mysql
2021-03-03 20:20:22mysql 列转行、列转行的问题今天在逛大java吧的时候看到一个行转列、列转行的问题,看了之后还真的不知道怎么下手,可能平时用hibernate作为持久层用多了,sql语句也不会写了,赶紧去找度娘聊聊天,然后建了个表做个... -
Mysql列转行-union all方法
2021-01-19 16:09:27查询数据 select * from user2 思路 把arms列的数据单独查询出来,并自己添加一列equipment,使其数据全部等于’arms‘。 select user_name,'arms' as equipment,arms from user2 把clothing列的数据单独查询出来,...