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, ...
随机推荐
- JavaScript深入之从原型到原型链(转载)
构造函数创建对象 我们先使用构造函数创建一个对象: function Person() { } var person = new Person(); person.name = 'Kevin'; co ...
- C# 异常处理最佳实践,解决代码分析提示CA1031:不要捕捉一般异常类型的解决办法
异常类型 异常一般分为系统异常 和 应用异常.系统异常有无法连接数据库,而应用异常是业务逻辑异常,比如授权失败. 在 C# 中异常基于 System.Exception,派生出 System.Syst ...
- git Octotree:提供项目目录,方便用户在线快速浏览项目结构【转载】
很好奇的是,GitHub 作为代码托管平台,竟然没有提供项目目录,方便用户在线快速浏览项目结构.所以,在线分析项目源码就会变得很繁琐,必须一层一层点击,然后再一次一次地向上返回.要知道,本来 GitH ...
- SpringBoot---异步消息
1.概述 1.1.SpringBoot 对 JMS 的自动配置 位于 org.springframework.boot.autoconfigure.jms下: 1.2.SpringBoot 支 ...
- windows下zookeeper集群安装
windows下zookeeper单机版安装,见:https://www.cnblogs.com/lbky/p/9867899.html 一:zookeeper节点为什么是奇数个? 单机模式的zk进程 ...
- Test 6.29 T1 预算方案
问题描述 "我需要你为我制订一个购物的方案.我将要为我的宫殿增置一些家具.有n 种备选家具,家具有主件和附件之分.在购买某个主件的附件之前,我必须先购买其对应的主件.某一主件的附件不会是另一 ...
- powerdesign 显示comment,生成excel
一.显示 Comment 1. 在弹窗的Table描述里面显Comment 效果图 实现方式: 2. 在最外层显示Comment 效果图 现实方式: 2.1. Tools > Display P ...
- 阿里云弹性裸金属服务器-神龙架构(X-Dragon)揭秘
在5月16日的飞天技术会新品直播中,特别邀请了业界知名大咖狒哥以及阿里云虚拟化资深专家旭卿作为现场直播的嘉宾.本次直播主要从产品背景到“X-Dragon架构”,从硬件设备到软件应用来深度的剖析“X-D ...
- Android9.0特性
这篇文章,是Android官方文档的中文版本. 注意事项(AndroidP 特性): (1),android.os.Build.VERSION.RELEASE ,需要当做字符串类型处理. (2),依赖 ...
- [USACO10MAR]伟大的奶牛聚集Great Cow Gat… ($dfs$,树的遍历)
题目链接 Solution 辣鸡题...因为一个函数名看了我贼久. 思路很简单,可以先随便指定一个根,然后考虑换根的变化. 每一次把根从 \(x\) 换成 \(x\) 的一个子节点 \(y\),记录一 ...