mysql中列转行
2024-09-05 23:07:00
通过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
最新文章
- ubuntu静态DNS配置,重启继续生效
- ADOConnectoin事务和存储过程中的Begin tran commit
- JAVA 设计模式 解释器模式
- 递归:codevs 1251 括号
- Cocos2d-JS v3.0 alpha 导入 cocostudio的ui配置
- [转载]C++ CString与int 互转
- 单例模式与Android
- java随机数生成(固定位数)
- android文件和图片的处理工具类(一)
- perl 跨行匹配;
- C#中如何使用IComparable<;T>;与IComparer<;T>;接口(转载)
- kafka配置记录
- English trip V2 - 6 Sports Teacher:Taylor Key:phrasal verbs
- Why does Delphi XE7 IDE hangs and fails on out of memory exception?
- java实现urlencode
- Unity ---WidgetsUI CreateTileView Demo
- list<;T>;中的按特定顺序排序
- win10 停留在启动画面
- BZOJ 2194 快速傅立叶变换之二 | FFT
- Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)
热门文章
- Linux就该这么学04学习笔记
- php7 mysqli连接mysql的几种方式
- [CSS]CSS中使用span和div遇到的问题
- XCODE真机调试No Devices Registered
- XMLUtil
- 2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 I. Reversion Count (java大数)
- mysql错误日志及sql日志的区别
- RabbitMQ核心概念和AMQP协议(二)
- css 实现div内显示两行或三行,超出部分用省略号显示
- (转)详解k8s组件Ingress边缘路由器并落地到微服务 - kubernetes