通过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中列转行的更多相关文章

  1. mysql数据库中列转行

    今天突然想到了数据库中的行专列与列转行,还不熟悉,在上网看了一下然后就自己写了个例子. 数据库表示这样滴! //全部查询出来SELECT (case type when 'MySql数据库' then ...

  2. mysql关于列转行的想法,以及列求乘集

    mysql列转行可以通过concat,先分组然后连接. show VARIABLES like '%group%' select @@group_concat_max_len SELECT GROUP ...

  3. Spark SQL中列转行(UNPIVOT)的两种方法

    行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...

  4. mysql 分组 列转行

    SELECT aa.type,CONCAT('(',GROUP_CONCAT('\'',aa.user_id separator '\'\,'),'\')') FROM (select  aa.typ ...

  5. mysql中列属性

    mysql列属性包括:NULL .default.comment.primary key.unique key 一.NULL定义方式:NULL(默认) NOT NULL 空属性有2个值,mysql数据 ...

  6. mysql中列的增删改

    增加列: ); ) after id; ) first; 修改列名: ); #change可改名字与字段类型 mysql> alter table a change uid uid int; Q ...

  7. MySQL中列别名为中文时,Order by 子句中使用别名时不要加引号

    暂时还不清楚原因 1.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 SC表: 这里,当做总成绩处理 select sid, sum(score) as '总成绩', avg(score) ...

  8. SQL server 和 Oracle 中列转行的小操作

    Oracle: create table zjhis.mz_zdxx_zl as select a.sfsb, wm_concat(a.zdmc) as 诊断 from zjhis.mz_zdxx a ...

  9. MySQL中不允许使用列别名作为查询条件

    在MySQL中有个特殊的规定,即不允许使用列别名作为查询条件.比如有下面一个表: select     ID,     title,     concept,     conceptLength,   ...

随机推荐

  1. 逐行读取txt文件,分割,写入txt。。。上传,下载

    s = [] f  = open('querylist.txt','r') #由于我使用的pycharm已经设置完了路径,因此我直接写了文件名 for lines in f:     ls = lin ...

  2. linux--基础知识3

    #linux虚拟终端切换 ctrl+alt+F(1-6) 总共支持六个终端切换 #mkdir /root/boot/目录  在指定路径下新建目录 #touch  /目录/文件名  在指定目录创建文件 ...

  3. [HEOI2015]兔子与樱花(贪心)

    [HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由\(n\)个树枝分叉点组成,编号从\ ...

  4. 【LeetCode】二分 binary_search(共58题)

    [4]Median of Two Sorted Arrays [29]Divide Two Integers [33]Search in Rotated Sorted Array [34]Find F ...

  5. Linux 查找指定内容在哪个文件中

    在实际的工作中,忘记配置项放在哪个文件中时,可借助命令来查询. eg: 1.grep -r "查询内容"  文件目录    #这样查询出来的包括文件名+内容 grep -r -l ...

  6. Windows中的Work线程和GUI线程

    Windows线程分为两种:Worker线程.GUI线程 worker线程:是指完全不牵扯到图形用户界面(GUI),纯粹做运算的线程. GUI线程:负责建造窗口以及处理消息循环(拥有消息队列).任何一 ...

  7. 032:DTL常用过滤器(1)

    为什么需要过滤器: 在DTL中,不支持函数的调用形式‘()’,因此不能给函数传递参数,这将有很大的局限性:而过滤器其实就是一个函数,可以对需要处理的参数进行处理,并且还可以额外接受一个参数(也就是说: ...

  8. Test 6.24 T3 水题

    问题描述 秋之国首都下了一场暴雨,由于秋之国地势高低起伏,不少地方出现了积水. 秋之国的首都可以看成一个 n 行 m 列的矩阵,第 i 行第 j 列的位置高度为 ai,j,首都以外的地方的高度可以都看 ...

  9. php长连接和短连接的使用场景

    短连接 连接->传输数据->关闭连接 比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接. 具体就是 浏览器client发起并建立T ...

  10. vue 3.0 vue-cli项目搭建要点

    一.使用vue-cli搭建项目(可使用vue ui图形化界面搭建项目,配置dist时,将名称设为项目名称) 二.项目搭建后 1.配置vue.config.js // 翻阅文档https://cli.v ...