某天在某技术群看见有人发了这样一个图求助,一看就觉得这题考查的是利用sql行转列

我脑海第一时间就想到用oracle的decode函数来写,但又想到题目没有具体说是哪一种数据库~如果用decode的话,在mysql下是完全不一样的用法(也是因为这次我才知道mysql也有decode方法,但跟oracle的完全不一样,其他数据库暂没研究)

所以我就回复写了这样一个sql

初想的SQL¶

select t1.d,t1.c1 '胜',t2.c2 '负' from
(select count(result) c1,d from t_result where result = '胜' group by d) t1
LEFT outer join
(select count(result) c2,d from t_result where result = '负' group by d) t2
on t1.d = t2.d

这样的写法比较直观,就是先拿“胜”的出来,在拿“负”的出来,最后用日期关联起来

PS:这里的t_result是数据表,d是时间列,result是胜负结果列

后面我细想了一下,这样结果是出来的,但其实效率不高,因为两次select会导致两次表的扫描,因为之前研究过一下oracle,对这些还是比较敏感的,所以后面又改写了一下

(可能后面写的并不是最优,但起码比最初的有进步,性能有所提升,毕竟优化都是一步一步来的)

SELECT d,SUM(CASE WHEN result='胜' THEN 1ELSE 0END),SUM(CASE WHEN result='负' THEN 1ELSE 0END)
FROM t_result
GROUP BY d

这样扫面一次表就可以得出结果了

最后,再附上oralce的decode函数写法

SELECT d,SUM(decode(result,'胜',1,0)),SUM(decode(result,'负',1,0))
FROM t_result
GROUP BY d

转载于:https://www.cnblogs.com/ForeVerWater/p/4012196.html

一个SQL的几种写法相关推荐

  1. 总结一下Java中SQL的九种写法

    因为在做持久层工具开发,现总结一下各种SQL的写法,也算是清晰一下自已的思路: 第一种写法 public void someMethod(){ try Connection conn=...; con ...

  2. DB2 存储过程中执行动态SQL的两种写法

    样本代码: DROP PROCEDURE QUOTATION.COPY_SAMPLE; CREATE PROCEDURE QUOTATION.COPY_SAMPLE (IN tableNameFrom ...

  3. Oracle查询某一天日期数据的SQL语句的几种写法

    本文章向大家介绍Oracle查询某一天日期数据的SQL语句的几种写法,主要包括Oracle查询某一天日期数据的SQL语句的几种写法使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值, ...

  4. Sql语句中 case when .. 的两种写法

    在 SQL查询语句中, case 语句的两种写法(SqlServer 2005 下测试通过): 1. select (case 字段1  when a then 0  when b then 1  e ...

  5. 获取另一个驱动的设备结构体_字符设备驱动的另一种写法

    字符设备驱动的另一种写法 在Linux2.6内核中,使用cdev结构体描述一个字符设备; cdev结构体(include/linux/cdev.h)定义如下: struct cdev { struct ...

  6. 【v-on】一个元素绑定多个事件以及一个事件绑定多个函数的两种写法

    本文代码主要讲述了v-on绑定事件函数传参,一个元素绑定多个事件的两种写法,一个事件绑定多个函数的两种写法,修饰符的使用. <!DOCTYPE html> <html lang=&q ...

  7. JSX列表渲染(五)——4种写法:基本写法 遍历写法 map遍历写法(常用-加工处理数组的每一项数据,最后形成一个新的数组) 列表遍历可以直接写到表达式中

    JSX列表渲染--4种写法:基本写法 & 遍历写法 & map遍历写法(常用-加工处理数组的每一项数据,最后形成一个新的数组) & 列表遍历可以直接写到表达式中 渲染多个元素 ...

  8. SQL的INSERT INTO的几种写法

    SQL的INSERT INTO的几种写法 先创建两个表 Test和NameList. CREATE TABLE Test( test_ID int IDENTITY(1,1), test_Name n ...

  9. MATLAB中求一个矩阵的最大值或最小值的两种写法

    第一种写法: max_A = max(max(A)); min_B = min(min(B)); 注意,一定要是两层运算,如果只作一层运算,则结果是一个向量,向量中的元素是每一列的最小值或最大值. 第 ...

最新文章

  1. 准备Java面试?mysql用户远程访问授权
  2. 数据表列名与数据库关键字冲突,在Hibernate下的解决办法
  3. 神奇的互换身体术--java的类型擦除
  4. 人工智能的发展之路,居然要从春秋时期讲起?
  5. LeetCode 2057. 值相等的最小索引
  6. 果你的浏览器关闭了 java,weblogic之CVE-2018-3191漏洞分析
  7. js string转json要注意的地方
  8. cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded 解决方法
  9. 09年关门歇业的15大网站 雅虎旗下4网站上榜
  10. cocos-2d iphone入门(二) cocos2d源代码生成查询文档
  11. 王道考研操作系统笔记(第二章)附:王道考研408所有PPT和思维导图
  12. C语言——自动关机小程序
  13. 洛谷在线测试P1878_舞蹈课
  14. JAVA实现微信支付功能
  15. 激活Windows Vista Home Basic Aero玻璃效果
  16. STGNN(www 2020)论文总结
  17. 模拟T1数字number
  18. oracle递归查询(层级查询)
  19. 路径跟踪与轨迹跟踪概念
  20. python字典一键多值如何遍历_[宜配屋]听图阁

热门文章

  1. Android中三种超实用的滑屏方式汇总(ViewPager、ViewFlipper、ViewFlow)
  2. Android中ActivityManager学习笔记
  3. gethostbyname函数
  4. shell实例第7讲:awk命令
  5. ARM汇编之MOV PC,LR
  6. java项目实现流水号自动增长
  7. Python中os与sys两模块的区别
  8. 如何检查项目的需求是否完整
  9. 物联网成果初显但瓶颈犹存
  10. [20160307]绑定变量的分配长度3.txt