mysql中列转行
通过group_concat()函数来实现
select group_concat(name) from table group by type
select group_concat(name separator ';') from table group by type
select group_concat(name separator ';') from table where column like '%sys%'
当确定列数时可采用下面sql将列转为行
SELECT userid,
SUM(IF(`subject`='语文',score,0)) as '语文',
SUM(IF(`subject`='数学',score,0)) as '数学',
SUM(IF(`subject`='英语',score,0)) as '英语',
SUM(IF(`subject`='政治',score,0)) as '政治'
FROM tb_score
GROUP BY userid


1.mapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cykj.reports.mapper.main.PerfCsMapper">
    <select id="findPercsByPrjAndBuild" resultType="java.util.HashMap">
        select
            apk_package_name 'apkName',
            ROUND(avg(apk_start_time),2) 'stAvg',
            ROUND(max(apk_start_time),2) 'stMax',
            ROUND(min(apk_start_time),2) 'stMin',
            group_concat(test_round) 'roundList',
            group_concat(apk_start_time) 'stList'
        from
            tb_project p inner join tb_build b on p.id = b.prj_id
            INNER JOIN tb_test_event e on b.id = e.build_id
            inner join tb_report_perf_coldstart pf on e.id = pf.test_event_id
        <where>
            e.testtype_id = 1
            <if test="param1 != null and param1 != ''">
                and p.prj_name = #{param1}
            </if>
            <if test="param2 != null and param2 != ''">
                and b.build_name = #{param2}
            </if>
        </where>
        group by apk_package_name
    </select>
</mapper>
2.mapper文件
package com.cykj.reports.mapper.main;
import java.util.List;
import java.util.Map;
public interface PerfCsMapper {
    List<Map<String,String>> findPercsByPrjAndBuild(String prjName, String bdName);
}
3.ServiceImpl.java
package com.cykj.reports.service.impl;
import com.cykj.reports.mapper.main.PerfCsMapper;
import com.cykj.reports.service.PerfCsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class PerfCsServiceImpl implements PerfCsService {
    @Autowired
    private PerfCsMapper perfCsMapper;
    @Override
    public List<Map<String, String>> findPercsByPrjAndBuild(String prjName, String bdName) {
        return perfCsMapper.findPercsByPrjAndBuild(prjName,bdName);
    }
}
4.Service文件
package com.cykj.reports.service;
import java.util.List;
import java.util.Map;
public interface PerfCsService {
    List<Map<String,String>> findPercsByPrjAndBuild(String prjName, String bdName);
}
5.Controller文件
package com.cykj.reports.controller;
import com.cykj.reports.domain.main.*;
import com.cykj.reports.service.*;
import com.cykj.reports.util.ColToRowUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class PerformanceController {
    @Autowired
    private PerfCsService perfCsService;
    //performance页面对应的下拉选所产生的相应数据显示
    @RequestMapping(value = "/performance")
    public String smoke(Model model){
        //7.查询最新projectName和及相关最新buildName对应的perfColdstart信息
        List<Map<String,String>> csMaps = perfCsService.findPercsByPrjAndBuild(prjName,bdName);
        //重组map集合
        List<Map<String, String>> csList = ColToRowUtil.getCsRowList(csMaps);
        model.addAttribute("csList",csList);
        return "performance";
    }
    //project改变时
    @RequestMapping(value = "/findPerfDataByProject")
    @ResponseBody
    public Map<String,Object> findDataByProject(@RequestParam("project") String project){
        Map<String,Object> map = new HashMap<>();
        //7.查询最新projectName和及相关最新buildName对应的perfColdstart信息
        List<Map<String,String>> csMaps = perfCsService.findPercsByPrjAndBuild(project,bdName);
        List<Map<String, String>> csList = ColToRowUtil.getCsRowList(csMaps);
        map.put("csList",csList);
        return map;
    }
    //build改变时
    @RequestMapping(value = "/findPerfDataByProjectAndBuild")
    @ResponseBody
    public Map<String,Object> findDataByProjectAndBuild(@RequestParam("project")String project, @RequestParam("build")String build){
        Map<String,Object> map = new HashMap<>();
        //7.查询最新projectName和及相关最新buildName对应的perfColdstart信息
        List<Map<String,String>> csMaps = perfCsService.findPercsByPrjAndBuild(project,build);
        List<Map<String, String>> csList = ColToRowUtil.getCsRowList(csMaps);
        map.put("csList",csList);
        return map;
    }
}
6.ColToRowUtil.java
package com.cykj.reports.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ColToRowUtil {
    public static List<Map<String,String>> getCsRowList(List<Map<String,String>> maps){
        List<Map<String,String>> mapList = new ArrayList<>();
        for(Map<String,String> m:maps) {
            Map<String, String> map = new HashMap<>();
//            System.out.println(m.get("bmType"));
            map.put("apkName",m.get("apkName"));
            map.put("stAvg",String.valueOf(m.get("stAvg")));
            map.put("stMax",String.valueOf(m.get("stMax")));
            map.put("stMin",String.valueOf(m.get("stMin")));
//            System.out.println(m.get("roundList"));
            String[] roundLists = m.get("roundList").split(",");
//            System.out.println(m.get("scoreList"));
            String[] stLists = m.get("stList").split(",");
            for(int i=0;i<roundLists.length;i++){
                map.put(roundLists[i],stLists[i]);
            }
            /*for (Map.Entry<String, String> entry : map.entrySet()) {
                System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()+"");
            }*/
//            System.out.println(map.size());
            mapList.add(map);
        }
        return mapList;
    }
}
参考链接: https://www.cnblogs.com/xiaoxi/p/7151433.html
mysql中列转行的更多相关文章
- mysql数据库中列转行
		
今天突然想到了数据库中的行专列与列转行,还不熟悉,在上网看了一下然后就自己写了个例子. 数据库表示这样滴! //全部查询出来SELECT (case type when 'MySql数据库' then ...
 - mysql关于列转行的想法,以及列求乘集
		
mysql列转行可以通过concat,先分组然后连接. show VARIABLES like '%group%' select @@group_concat_max_len SELECT GROUP ...
 - Spark SQL中列转行(UNPIVOT)的两种方法
		
行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...
 - mysql  分组 列转行
		
SELECT aa.type,CONCAT('(',GROUP_CONCAT('\'',aa.user_id separator '\'\,'),'\')') FROM (select aa.typ ...
 - mysql中列属性
		
mysql列属性包括:NULL .default.comment.primary key.unique key 一.NULL定义方式:NULL(默认) NOT NULL 空属性有2个值,mysql数据 ...
 - mysql中列的增删改
		
增加列: ); ) after id; ) first; 修改列名: ); #change可改名字与字段类型 mysql> alter table a change uid uid int; Q ...
 - MySQL中列别名为中文时,Order by 子句中使用别名时不要加引号
		
暂时还不清楚原因 1.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 SC表: 这里,当做总成绩处理 select sid, sum(score) as '总成绩', avg(score) ...
 - SQL server  和 Oracle 中列转行的小操作
		
Oracle: create table zjhis.mz_zdxx_zl as select a.sfsb, wm_concat(a.zdmc) as 诊断 from zjhis.mz_zdxx a ...
 - MySQL中不允许使用列别名作为查询条件
		
在MySQL中有个特殊的规定,即不允许使用列别名作为查询条件.比如有下面一个表: select ID, title, concept, conceptLength, ...
 
随机推荐
- vue中对于图片是否正常加载的思考
			
问题:由于业务需要,我们需要判断图片能否正常的加载,如果未正常加载的话,需要显示一张默认图片: 方案:1,由于后台返回的是一个图片id数组,例如 imgList=['343313131','21333 ...
 - swift实现线程安全的栈和队列
			
实现一个线程安全的栈 这里使用数组来存储栈的数据.不足之处在于本例中的Stack可以无限扩容,更好的是初始化时候指定一个最大容量,防止不断扩容申请内存导致内存不够的问题.这里的线程安全使用一个串行队列 ...
 - 轻便的gb28181协议中的rtp+ps格式视频流的封装和解析
			
streams 轻便的gb28181协议中的rtp+ps格式视频流的封装和解析 packet packet实现ps的相关封装和解析, example/enc 通过joy4来读本地视频文件,然后调用Rt ...
 - 解决在mysql表中删除自增id数据后,再添加数据时,id不会自增1的问题
			
https://blog.csdn.net/shaojunbo24/article/details/50036859 问题:mysql表中删除自增id数据后,再添加数据时,id不会紧接.比如:自增id ...
 - Nginx-配置负载均衡实例
			
配置负载均衡实例 实现效果: 配置负载均衡 实验代码 1) 首先准 备两个同时启动的 Tomcat 2) 在 nginx.conf 中进行配置 随着互联网信息的爆炸性增长,负载均衡(load bala ...
 - 数据库的特性与隔离级别和spring事务的传播机制和隔离级别
			
首先数据库的特性就是 ACID: Atomicity 原子性:所有事务是一个整体,要么全部成功,要么失败 Consistency 一致性:在事务开始和结束前,要保持一致性状态 Isolation 隔离 ...
 - 无题II
			
无题II Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
 - codecs模块, decode、encode
			
使用codecs模块,在Python中完成字符编码 字符的编码是按照某种规则在单字节字符和多字节字符之间进行转换的某种方法.从单字节到多字节叫做decoding,从多字节到单字节叫做encodin ...
 - php函数名前添加&   函数的引用返回
			
function &test(){ static $b=0; $b= $b+1; return $b; } $a= test(); echo $a,"\n"; $a = 3 ...
 - LightOJ 1342 Aladdin and the Magical Sticks [想法题]
			
题目链接 : http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27050 --------------------------- ...