Mysql group_concat的反向应用实现(Mysql列转行)
2016-05-11 14:58
459 查看
本文参考:http://blog.chinaunix.net/uid-411974-id-3990697.html,示例具业务场景略作改动。
问题:查询5月份温度高于15度的次数,sql如何写?
如果列表较多,如100列,sql如何写?
解决:使用cross join,具体用法可参考文章顶部的博客原文。
脚本如下:
-- 气温采集表,每天每个整点的气温度数 CREATE TABLE temp ( id INT, time1 INT, time2 INT, time3 INT, time4 INT, receive_date DATE ) ; -- 初始化数据 INSERT INTO `temp` (`id`, `time1`, `time2`, `time3`, `time4`, `receive_date`) VALUES('1','10','15','25','16','2016-05-11'); INSERT INTO `temp` (`id`, `time1`, `time2`, `time3`, `time4`, `receive_date`) VALUES('2','9','14','26','15','2016-05-10'); INSERT INTO `temp` (`id`, `time1`, `time2`, `time3`, `time4`, `receive_date`) VALUES('3','8','13','27','14','2016-05-09'); INSERT INTO `temp` (`id`, `time1`, `time2`, `time3`, `time4`, `receive_date`) VALUES('4','7','12','28','13','2016-05-08'); INSERT INTO `temp` (`id`, `time1`, `time2`, `time3`, `time4`, `receive_date`) VALUES('5','6','11','29','12','2016-05-07');
问题:查询5月份温度高于15度的次数,sql如何写?
如果列表较多,如100列,sql如何写?
解决:使用cross join,具体用法可参考文章顶部的博客原文。
脚本如下:
SELECT receive_date, SUBSTRING_INDEX( SUBSTRING_INDEX(sub_id, ',', seq), ',', - 1 ) sub_id, seq FROM (SELECT 0 seq UNION SELECT 1 seq UNION SELECT 2 seq UNION SELECT 3 seq UNION SELECT 4 seq) sequence CROSS JOIN (SELECT CONCAT( p.time1, ',', p.time2, ',', p.time3, ',', p.time4 ) sub_id, p.receive_date FROM temp p) temp2 WHERE seq BETWEEN 1 AND 4 ORDER BY receive_date, seq ASC ;
相关文章推荐
- Mysql字符串截取函数SUBSTRING的用法说明
- mac上MySQLdb问题解决
- windows环境中mysql忘记root密码的解决办法
- MySQL安装-Windows
- mysql 安装暂停
- Mysql分析性能(存储过程)
- MYSQL必知必会读书笔记 第十七章 组合查询
- MySQL学习11:修改数据表(一)
- Mysql报错:1172 - Result consisted of more than one row
- mysql数据库迁移到另一个硬盘上
- mysql5.7 zip 以上版本安装方法
- mysql relay log参数汇总
- MySQL添加外键失败ERROR 1452的解决
- 1130 host is not allowed to connect to mysql
- mysql中指定数据排序
- Percona-tookit学习笔记(一)
- MySQL分库分表环境下全局ID生成方案
- mysql复制表结构及检查表、存储过程是否存在
- 使用mysqldump迁移数据
- mac 包管理器安装mysql