case when 将表中一列按照一定规则分两列显示
来源:互联网 发布:淘宝静物拍摄怎么做 编辑:程序博客网 时间:2024/06/15 20:00
引言
自从做android开发后就很少接触sql代码的编写,前段时间一朋友问我一到sql面试题,咋眼一看这不是挺简单的嘛对两列做GROUP BY不就可以了,
select id , dates,count(1)from data GROUP BY dates,result
写了之后才发现并不是想要的结果。瞬间自信心。。。。。灰溜溜的告诉他我不会(当时不会)。因为那段时间工作太忙就把这件事放到脑后了。正好五一假期没事做就无意间又发现了那道题。依我的性格不搞定这道题怎么能行。
问题
根据下图表中数据写出sql,结果如图所示。。
具体实现
创建表
DROP TABLE IF EXISTS `data`;CREATE TABLE `data` ( `dates` varchar(255) CHARACTER SET utf8 DEFAULT NULL, `id` int(11) DEFAULT NULL, `result` varchar(255) CHARACTER SET utf8 DEFAULT NULL);INSERT INTO `data` (`dates`, `id`, `result`) VALUES ('2015109101', 1, '胜');INSERT INTO `data` (`dates`, `id`, `result`) VALUES ('2015110101', 2, '负');INSERT INTO `data` (`dates`, `id`, `result`) VALUES ('2015109101', 3, '负');INSERT INTO `data` (`dates`, `id`, `result`) VALUES ('2015109101', 4, '胜');INSERT INTO `data` (`dates`, `id`, `result`) VALUES ('2015110101', 5, '胜');INSERT INTO `data` (`dates`, `id`, `result`) VALUES ('2015109101', 6, '负');INSERT INTO `data` (`dates`, `id`, `result`) VALUES ('2015109101', 7, '胜');INSERT INTO `data` (`dates`, `id`, `result`) VALUES ('2015110101', 8, '负');
最开始我是这么想的按照日期分组,用子查询分别统计result的“胜”和“负”,于是就有了一下错误代码。。。
select id , dates,(select count(result) from data where result="胜") as "胜",(select count(result) from data where result="负") as "负"from data GROUP BY dates
结果并不是我想象的那样。。
第一次尝试失败。。。。。
第二次换一种思路用子查询不行就使用case when 于是就有了
select id, dates,case when result like'胜' then count(result) end as '胜',case when result like'负' then count(result) end as '负' from data GROUP BY dates;
结果又一次失败(case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。)
但是不觉得这次结果已经很接近了吗。仔细观察上面sql突然发现了一点咱case when … then 之后我只是用count(函数)把result进行了处理其实在then 之后可以这么处理then 1else 0 end 然后对case when 的结果进行sum().不就可以了嘛。说着就来
SELECT id,dates,SUM( CASE WHEN result = '胜' THEN1 ELSE 0 END) as "胜",SUM( CASE WHEN result = '负' THEN1 ELSE 0 END) as "负"FROM `data`GROUP BY dates;
这次结果与所想完全一致。
写在最后
当然或许还有其他的实现方法。如有更好的方法还请不吝赐教,谢谢!
0 0
- case when 将表中一列按照一定规则分两列显示
- case when 多条件, 只更新一列
- 类里面的方法要按照一定规则来写
- swift按照一定规则生成校验签名sign,扩展Dictionary
- 查询库中所有表结构按照一定格式显示
- sql:当一列为空时取另一列(case when then)
- CASE WHEN
- Case when
- CASE WHEN
- CASE WHEN
- case when
- case when
- CASE WHEN
- case when
- Case when
- case when
- case when
- 【case when】
- zoj3872Beauty of Array
- POJ-3071 Football (概率DP)
- python-模拟math.pi
- leetcode:25. Reverse Nodes in k-Group
- linux常用命令-part1
- case when 将表中一列按照一定规则分两列显示
- linux常用命令-part2
- 搜索水题 (排列组合)
- Ubuntu16.04 VirtualBox的卸载和升级
- JSP与Servlet中的相对路径与绝对路径问题
- Python运维自动化--nginx配置文件对比
- Java设计模式之代理模式
- Unix常用命令
- 对Linux系统的理解以及学习Linux内核的心得