求求大神帮写写这种 行转列类型的mysqlsql数据库查询语句大全呀

mysql行转列(拆分字符串场景)
日期: 04:07:16
来源:csdn
mysql行转列(拆分字符串场景)
一对多没有建立中间表的时候经常会采用分隔符的形式将“多”存储在“一”的一个字段里,这样做的代价是无法向一对多的时候那样直接关联查询,一般采用在程序中分割后分别查询的办法。如下图:
如何才能直接用sql语句查询出下图的效果呢?
可以借助一个序号表,该表中除了连续的id没有其它字段,id的值范围取决于"一"中存储的信息拆分后的数量。
SUBSTRING_INDEX(mobile, ',', a.id),
SUBSTRING_INDEX(mobile, ',', a.id - 1),
)AS mobile
CROSS JOIN(
CONCAT(mobile, ',')AS mobile,
LENGTH(mobile)- LENGTH(REPLACE(mobile, ',', ''))+ 1 AS size
)b ON a.id &= b.size
版权声明:本文为博主原创文章,未经博主允许不得转载。
本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
提到shared pool,都会不由得和sql语句的解析过程联系起来,因为shared pool所做的主要工作就是解析sql语句,生成执行计划,在之前的两篇中对于shared pool的存储进行了简单的分析,在10g,11g都是保留了255个bucket,可见这个值还是一个最优的默认值了。 在第二篇中分析了一些关于绑定变量的内容,一般一提到sql语句的解析,都会多多少少提到绑定变量,其实有时候也给我们带来一些困扰,其实直接使用绑定是一种情况,还可以通过其它的方式间接使用。 比如下面的例子。 declare
mysql创建合并表和分区表有点相似,他是mysql 的一种特性,可以把多个结构相同的myisam表合并为一个虚表,存续引擎必须是merge,当从合并表中查询就像从子表中查询一样,和视图有写相似,当创建合并表时也有自己的frm和mrg 文件。 合并表创建方法 create table t3(a int primary key ); create table t4(a int primary key ); create table mrg(a int primary key ) union=(t3,t4)
在linux的环境下,在mysql的配置里会对大小写有一定的要求的。尤其是一些云平台提供的固定环境是配置好这些要求,所以需要对这些有一定的了解。(比如阿里云就会设定lower_case_table_names=1,具体分析在后面) 1、表名大小写 Linux默认情况下区分大小写(另外,MySQL在Windows下数据库名、表名、列名、别名都不区分大小写,即使设置lower_case_table_names=0,在查询时还是不会区分大小写。只是在导入导出时会对大小写有区别。原因是大小写的功能是在操作系统的文
附上MySQL之SQL分析三部曲地址http://blog.itpub.net//viewspace-1709732/ -------------------------------------------------------------------------------------------------正文-----------------------------------------------------------------------------------------
上一篇文章介绍了replace into的基本原理。本章内容通过一个例子说明 replace into 带来的潜在的数据质量风险,当涉及replace into操作的表含有自增主键时,主备切换后会造成数据覆盖等不一致的情况发生。 二 案例分析 在主库上操作 root@test 12:36:51show create table t1 \G *************************** 1. row ***************************
http:// blog.csdn.net/pipisorry/article/details/ 待写 from: http://blog.csdn.net/pipisorry/article/details/ 版权声明:本文为博主原创文章,未经博主允许不得转载。
1、错误描述 1 queries executed, 0 success, 1 errors, 0 warnings查询:show master logs错误代码: 1381You are not using binary logging执行耗时 : 0 sec传送时间 : 0 sec总耗时 : 0.002 sec 2、错误原因 #显示二进制日志数目SHOW MASTER LOGS; 3、解决办法
由出错代码可知,没有用二进制日志
mysqldump是客户端用来备份数据库或者在不通数据库之间进行数据迁移的工具,备份内容包含创建表或者装载表的SQL语句
备份单个数据库或者数据库中部分数据表 mysqldump [参数] 数据库名 [表名] 备份指定的一个或者多个数据库 mysqldump [参数] --database db1 [db2db3] 备份所有数据库 mysqldump [参数] --all-database
视图是虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图的基础上定义。数据库中只存放视图的定义,没有视图中的数据,这些数据都存放在原来的表中。视图不支持输入记录的功能创建视图格式:create [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]VIEW 视图名 [(属性清单)]AS SELECT 语句[WITH [CASCADED|LOCAL] CHECK OPTION];注:ALGORITHM是可选参数表示视图选择的算法,属性清单是可选参数指定了视图中各
【概念】什么事GTIDS(Global Transactions Identifier)是MySQL5.6.5新加入的一项新特性。 当使用GTIDS时,无论是在Master上提交事物还是在Slave上应用,每一个事物都可以被识别并跟踪; 添加新的Slave或者当发生故障需要将Master身份迁移到Slave上时,都无需考虑哪一个二进制日志以及哪个position,极大的简化了操作步骤; GTIDs是完全基于事务的。因此,不支持MYISAM存储引擎;
【关于GTID】GTID由source_id和tra
Copyright (C)
ITfish.net-- ----------------------------
-- Table structure for `TabName`
-- ----------------------------
DROP TABLE IF EXISTS `TabName`;
CREATE TABLE `TabName` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(20) DEFAULT NULL,
`Date` date DEFAULT NULL,
`Scount` int(11) DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of TabName
-- ----------------------------
INSERT INTO `TabName` VALUES ('1', '小说', '', '10000');
INSERT INTO `TabName` VALUES ('2', '微信', '', '20000');
INSERT INTO `TabName` VALUES ('3', '小说', '', '30000');
INSERT INTO `TabName` VALUES ('4', '微信', '', '35000');
INSERT INTO `TabName` VALUES ('5', '小说', '', '31000');
INSERT INTO `TabName` VALUES ('6', '微信', '', '36000');
INSERT INTO `TabName` VALUES ('7', '小说', '', '35000');
INSERT INTO `TabName` VALUES ('8', '微信', '', '38000');
-- ------------------------
-- 查看数据
-- ------------------------
* from TabN
-- ------------------------
-- 列转行统计数据
-- ------------------------
SELECT Date ,
MAX(CASE NAME WHEN '小说' THEN Scount ELSE 0 END ) 小说,
MAX(CASE NAME WHEN '微信' THEN Scount ELSE 0 END ) 微信
FROM TabName
GROUP BY Date
-- ------------------------
-- 行转列统计数据
-- ------------------------
Date, group_concat(NAME,'总量:',Scount) as b_str from
group by Date
select Date,NAME, group_concat(NAME,'总量:',Scount) as b_str from
group by Date ,NAME
阅读(...) 评论()求求大神帮写写这种 行转列类型的mysql语句呀_百度知道
求求大神帮写写这种 行转列类型的mysql语句呀
请大神看图。。。。。。
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
1、首先,使用case when函数输出单个课程的成绩case when course='语文' then score end as 语文case when course='数学' then score end as 数学case when course='英语' then score end as 英语sql语句:select name ,case when course='语文' then score end as 语文,case when course='数学' then score end as 数学,case when course='英语' then score end as 英语2、使用group by 和sum,去掉NULL得出课程的成绩sql语句:select name ,sum(case when course='语文' then score end) as 语文,sum(case when course='数学' then score end )as 数学,sum(case when course='英语' then score end )as 英语from
我的部门名称是活的,不能在语句中写死啊
有实力 无所惧
主营:网络安全 电脑加速 电脑杀毒 电脑办公 漏洞修复
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。MySQL行转列实现和总结 - 简书
MySQL行转列实现和总结
一、行转列实例
1、准备数据
CREATE TABLE tb(`cname` VARCHAR(10),cource VARCHAR(10),score INT) ENGINE=INNODB;
INSERT INTO tb VALUES('张三','语文',74);
INSERT INTO tb VALUES('张三','数学',83);
INSERT INTO tb VALUES('张三','物理',93);
INSERT INTO tb VALUES('李四','语文',74);
INSERT INTO tb VALUES('李四','数学',84);
INSERT INTO tb VALUES('李四','物理',94);
最终想要的结果是这样:
| 姓名 | 语文
+------+--------+--------+----+
| 张三 | 74.00 | 83.00 | 93.00 |
| 李四 | 74.00 | 84.00 | 94.00 |
2、利用SUM(IF()) 生成列
cname AS "姓名",
SUM(IF(cource="语文", score, 0)) AS "语文",
SUM(IF(cource="数学", score, 0)) AS "数学",
SUM(IF(cource="物理", score, 0)) AS "物理"
GROUP BY cname
3,利用max(CASE ... WHEN ... THEN .. ELSE END) AS "语文"的方式来实现
cname AS "姓名",
MAX(CASE cource WHEN "语文" THEN score ELSE 0 END) AS "语文",
MAX(CASE cource WHEN "数学" THEN score ELSE 0 END) AS "数学",
MAX(CASE cource WHEN "物理" THEN score ELSE 0 END) AS "物理"
GROUP BY `cname`
原有的数据是这样的:
cname cource score
想变成这样:
暂且将原先的表称为A,之后的称为B,A想成为B,主要是讲A表中cource列中的行数据变为列,抠除行转列的语法之外,使用了GROUP BY cname进行分组,A表的业务主键是cname和cource,这是一个联合主键。
SELECT * FROM tb GROUP BY cname
总结一:行转列,分组(GROUP BY)的列必须是除需要行转列之外的业务主键。
例如tb表中业务主键应该是cname和cource,但是cource需要进行行转列,所以需要按照cname分组。
这里的字段比较少,体现的不明显,可以在tb表的基础上再加一列,性别:
cname cource score gender
这时候业务主键是cname,cource,gender,要向进行行转列,SQL应该是这样的:
cname AS "姓名",
gender AS "性别",
MAX(CASE cource WHEN "语文" THEN score ELSE 0 END) AS "语文",
MAX(CASE cource WHEN "数学" THEN score ELSE 0 END) AS "数学",
MAX(CASE cource WHEN "物理" THEN score ELSE 0 END) AS "物理"
GROUP BY `cname`, gender
显示结果是:
如果还是以cname分组,结果会是这样:
总结:不管是以MAX还是SUM作为行转列,其原理还是比较类似,由于自己也没有深入了解,也也只能将自己的想法说出来,如有什么问题,还请指导。参考博客:
喜欢孤独与自由。
50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学...
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号; sel...
MySQL密码1.Mysql 5.6初次安装完的默认密码存放于 /root/.mysql_secret2.SET PASSWORD = PASSWORD('XXXXXX');3.将root对应的密码全部修改为新密码:use mysqlupdate user set pass...
Oracle基础操作 查看进程ps
–ef | grep ora 登陆数据库sqlplus sys/123456 as sysdbasqlplus scott/tiger@db88 切换用户 查看用户
查看当前登录用户se...
百战程序员_ Java1573题 QQ群:034603 掌握80%年薪20万掌握50%年薪10万 全程项目穿插, 从易到难,含17个项目视频和资料持续更新,请关注www.itbaizhan.com 国内最牛七星级团队马士兵、高淇等11位十年开发经验专...
昨日慌张,今日匆忙,一时一世,已然沧桑,繁星落叶释,尽头满哀伤; 抬首方向,低首彷徨,一朝一夕,庞然心上,大河辉锦绣,途中增高强。
晚上,对面的老爷爷头发花白, 沙沙地翻着报纸。 眯眯眼的猫伸了个懒腰。 落地窗前的灯光被晕染成星星点点的光环。 风凉凉的, 这个城市带给我的快乐轻轻的,小小的。 其实有很多话想和你说, 但是你不找我,我又很酷, 所以我就不和你说, 然后把它们拆成很多句, 和无聊的每个人都说...求助,哪位大神帮忙写一下SQL语句,非常感谢!【mysql吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:47,214贴子:
求助,哪位大神帮忙写一下SQL语句,非常感谢!收藏
教师号  星期号 是否有课1    2   有1    3   有2    1   有3    2   有`1    2   有写一条sql语句让你变为这样的表教师号 星期一 星期二 星期三1       2   12   13       1各星期下的数字表示:对应的教师在星期几已经排的课数
从原理的角度来介绍MySQL数据库的备份和恢复,让用户更加了解RDS的备份恢复机制.
tid表示教师编号,week代表星期 ,test 是数据库名 sql语句如下:SELECT
WHEN week = '1' THEN 1
as 星期一,
WHEN week = '2' THEN 1
WHEN week = '3' THEN 1
END) as 星期三FROM
testGROUP BY tid
MySQL支持plovt么,就是一个行转列的写法
登录百度帐号

我要回帖

更多关于 sql数据库查询语句大全 的文章

 

随机推荐