Mysql按照字段值做分组行转列查询
2015-07-24 11:01
786 查看
今天做个后台服务,有个需求是批量生成一批表的数据,如果用BulkInsert会提升很大一截提交效率,但是如果用循环构造提交的Datable,则算法开销太高,所以用这种查询批量查出符合格式的DataTable结果集。
下面是行转列后查询效果如图:
下面是上面两张图的最终查询语句:
*思想就是将查询列做CASE判断值,然后放在 SELECT段中作为别名列显示字段值,然后再根据ID分组。
下面是内层的原始查询效果:下面是行转列后查询效果如图:
下面是上面两张图的最终查询语句:
SELECT f_gameID,SUM(score) AS totNum, SUM(CASE f_sub WHEN '01' THEN score ELSE 0 END) AS f_subject01,SUM(CASE f_sub WHEN '02' THEN score ELSE 0 END) AS f_subject02, SUM(CASE f_sub WHEN '03' THEN score ELSE 0 END) AS f_subject03,SUM(CASE f_sub WHEN '04' THEN score ELSE 0 END) AS f_subject04, SUM(CASE f_sub WHEN '05' THEN score ELSE 0 END) AS f_subject05,SUM(CASE f_sub WHEN '06' THEN score ELSE 0 END) AS f_subject06, SUM(CASE f_sub WHEN '07' THEN score ELSE 0 END) AS f_subject07,SUM(CASE f_sub WHEN '08' THEN score ELSE 0 END) AS f_subject08, SUM(CASE f_sub WHEN '09' THEN score ELSE 0 END) AS f_subject09 FROM ( SELECT u.f_gameID,u.f_sub,COUNT(u.f_sub) AS score FROM t_mfg_GameUserAnswers AS u LEFT JOIN t_mfg_Class AS c ON u.f_gameId = c.f_gameId WHERE u.f_startTime > '2015-07-20' AND u.f_endTime < '2015-07-24' -- AND c.f_schoolId = 193034 GROUP BY u.f_gameID ,u.f_sub ) AS a GROUP BY f_gameID;
相关文章推荐
- mysql -- 事务处理
- 体验MySQL5.6.25并处理所遇到的问题
- cmd 进入mysql 小技巧
- Mysql关于日期时间函数、格式化较全的内容
- jsp连接mysql数据库
- mysqlbinlog的日志类型
- MYSQL---ANY,SOME,ALL
- mysql快速翻倍插入数据
- MySQL数据类型总结
- 【MySQL学习】MySQL连接
- MYSQL---解决命令行汉字乱码
- MYSQL---INSERT...SET...
- MYSQL---INSERT...SELECT...
- Mysql 存储引擎中InnoDB与Myisam的主要区别
- 【MySQL学习】MySQL管理
- Mysql整数运算NULL值处理注意点
- MYSQL---LIMIT
- Hive安装以及部署(Ubuntu-MySql)
- MySQL GROUP_CONCAT函数返回BLOB
- 编译Mysql时configure: error: No curses/termcap library found 的错误解决方法