mysql 数据库 把一个表的每3行里同一个项目,变成一行3个项目。sql文怎么写。请教了
发布网友
发布时间:2022-04-08 23:10
我来回答
共2个回答
懂视网
时间:2022-04-09 03:32
我的这篇文章整理了mysql多行变多列的2种常见形式:http://blog.csdn.net/rainyspring4540/article/details/50231435
这里就不赘述了,下面说下它更复杂的衍生形式:
表结构:
create table student (
name varchar(20) not null, -- 姓名
course varchar(20) not null,-- 科目
score int ,-- 成绩
bossEvaluate varchar(20),-- 校长评估
familyEvaluate varchar(20),-- 家族评估
societyEvaluate varchar(20), -- 社会评估
primary key(name,course)
);
insert into student values('小王','数学','10','A','B','C');
insert into student values('小王','语文','20','A','B','C');
insert into student values('小王','英语','30','A','B','C');
insert into student values('小花','数学','10','A','A','A');
insert into student values('小花','语文','40','A','A','C');
insert into student values('小花','英语','10','A','B','C');
insert into student values('小虎','数学','25','C','B','C');
insert into student values('小虎','语文','10','A','C','C');
insert into student values('小虎','英语','10','A','B','C');
形如:
下面的是一般的生成展现和sql,贴出来就不赘述了:
SELECT name ,max(if(course='数学',score,0)) as '数学' ,max(if(course='语文',score,0)) as '语文' ,max(if(course='英语',score,0)) as '英语'
FROM ds_wjytest2.student group by name;
我这里用的是if不是case when,其实效果都差不多;
下面是更复杂点的衍生展现和sql:
SELECT name ,
max(if(course='数学',score,0)) as '数学' ,max(if(course='数学',bossEvaluate,null)) as '校长评估' ,max(if(course='数学',familyEvaluate,null)) as '家族评估' ,max(if(course='数学',societyEvaluate,null)) as '社会评估',
max(if(course='语文',score,0)) as '语文' ,max(if(course='语文',bossEvaluate,null)) as '校长评估' ,max(if(course='语文',familyEvaluate,null)) as '家族评估' ,max(if(course='语文',societyEvaluate,null)) as '社会评估',
max(if(course='英语',score,0)) as '英语' ,max(if(course='英语',bossEvaluate,null)) as '校长评估',max(if(course='英语',familyEvaluate,null)) as '家族评估' ,max(if(course='英语',societyEvaluate,null)) as '社会评估'
FROM ds_wjytest2.student group by name;
是不是感觉if函数很好用。。。有些领导就喜欢这种冗长的报表,顺便说下:如果是大数据导出这样结构的数据,最好不要使用这个语句,如果数据量太大(10w),或者类似这样的伴随分类字段(这里科目是分类字段)的延伸字段(家长评价、社会评价、小校长评价)太多会是性能极速下降;
我测试解决大数据导出这样结构采用分页导出(带排序字段),并且每次分页读取时先缓存一部分基本表的信息,由于是带排序的,所有缓存的命中率很高;已经命中的清除缓存,未命中的库里读取这个记录,并在此读入一部分信息到缓存(细节以后单写篇文章。。。)
mysql多行变多列(衍生形式)
标签:
热心网友
时间:2022-04-09 00:40
mysql 数据库 把一个表的每3行里同一个项目,变成一行3个项目。sql文怎么写
是一个简单的列子,我再详细说明一下吧。
A表 只有一个字段【No】,数据为1,2,3,4 四行内容
B表有三个字段【No1】,【No2】,【No3】
希望通过一个sql文,把A表的数据转换为B表的数据,使A表的相邻每3行数据变成B表的一条数据。
也就是把A表的1,2 ,3,4 四行 转换为B表的【1,2,3】,【2,3,4】两行数据。
mysql 数据库 把一个表的每3行里同一个项目,变成一行3个项目。sql...
mysql 数据库 把一个表的每3行里同一个项目,变成一行3个项目。sql文怎么写 是一个简单的列子,我再详细说明一下吧。A表 只有一个字段【No】,数据为1,2,3,4 四行内容 B表有三个字段【No1】,【No2】,【No3】希望通过一个sql文,把A表的数据转换为B表的数据,使A表的相邻每3行数据...
mysql 数据库 把一个表的每3行里同一个项目,变成一行3个项目。sql...
slect c.字段,d.字段 from (select a.字段,b.字段 from A表 left join b表 on a.id=b.id) as c left join c.id=d.id 先把2个表进行关联 在跟第3个表关联
mysql里面查某个数据库的所有表名,语句该怎么写?不要什么show tables,因...
具体语法:TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]其实从语法上看,可以排序,也可以过滤记录集,不过比较简单,没有 SELECT 那么强大。示例 1 简单的建一张很小的表 y1,记录数为 10 条。表 t1,插入 10 条记录 mysql-(ytt/3305)->create table t1 (r1 in...
mysql 怎么给一个表一次增加多个字段?
1、添加单行字段:ALTER TABLE roleADD `module` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '模块';2、添加多行字段:ALTER TABLE roleADD COLUMN `module` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '模块',ADD COLUMN `type` VARCHAR(30) NOT NULL COMMENT '项目' AFTER `default_mod...
Mysql数据库中,在时间字段中把每条数据各加一个月的时间,请问怎么写sql...
使用函数 DATE_ADD(date,INTERVAL expr type)DATE_ADD(date,INTERVAL 1 MONTH)
写一个sql 查询一个表中姓名相同的记录,并把数据按照重复的次数从高到...
select 姓名列,count(1) as [重复次数] from 表名 group by 姓名列 having count(1)>=2 order by 重复次数 desc
...如何把相同字段里的数据写入另一个表里去?用mysql或PHP写_百度...
你的两个表A列有不重复的文本或文本字符串,比如两表的A列都为姓名且不重复,比如你这A列ID和UID不重复,你就可以在表2(SHEET2)B2输入VLOOKUP(A2,SHEET1!A:C,2),C2输入=VLOOKUP(A2,SHEET1!A:C,3)并向下复制,然后把表1A列的数据复到表2 的A列....
我有多条sql的更新语句,怎么用一个循环语句执行一次更新整一张数据表...
1、首先,使用Navicat for MySQL连接数据库并创建一个数据库。2、接着点击查询,这里有两个查询,随便点击一个都可以。3、既然是要执行SQL语句,所以我们要先新建一个查询窗体才得。4、写一句SQL语句来演示啦。5、写完练习的SQL语句,再点击运行按钮,左上方的绿色图标就是。6、然后记得刷新一下表,...
数据库中的CHECK约束的表达式怎样写才能使表中的一列只能取3个值?或者...
1. constraint 名字在每个数据库中唯一。也就是说单个数据库里不存在相同的两个 constraint,如果不定义,系统自动生成一个唯一的约束名字。2. check 约束针对语句 insert/update/replace/load data/load xml 生效;针对对应的 ignore 语句失效。3. 并非每个函数都可以使用,比如函数结果不确定的:NOW()...
mysql把一个数据库中的数据复制到另一个数据库中的表 2个表结构相同
1、使用软件Navicat就可迁移复制数据库,打开Navicat,右键点击左边空白的地方,点击New Connection下的MySQL,创建一个服务器的连接,下面将演示把本地的数据迁移到服务器:2、在弹出的创建新连接的窗口里,输入服务器的IP,数据库账号,密码等,然后就可以连接数据库了:3、创建好后们打开本地的数据库,...