zoukankan      html  css  js  c++  java
  • 数据库之Case When

           近期几天的工作本来组长是安排我用mindfocion画几个图,本来以为难点是这个控件的使用,可是开发的时候才发现由于数据量有点多,所以在开发的时候汇总这些信息倒是费了我许多的功夫,最后总结一下就是写了几个SQL语句,这里与大家分享一下。假设有须要用的就太好了。

          先说一下需求,组长让我画一个图。要求是把近期几年的**信息统计一下,比如2012年这个**交接了多少次,2013年多少次,总共多少次。想想也不难是吧,于是组长问我怎么样,我就轻松的接下来了。

    可是曾经一直接触的是简单的SQL语句和一些EntityFramework等工具,对于SQL语句就真的把我难住了。写了一天的SQL语句,也是没有达到想要的效果。后来上网看了一下,原来SQL里边有一个Case When语句。

           用途

           当我们在写SQL语句的时候,假设遇到这么一种情况,就是假如。

    。。

    。则。

    。,否则。

    。比如,增加是城市是北京,就返回时中国城市,假设是东京,就返回日本城池。否则返回西欧城市。

    这个请款下我们就能够用到这个,比例如以下边的小样例。

    select 
      case when t.name = '北京' then '中国' 
      case when t.name = '东京' then '日本' 
      else '西欧'
      end
    from test1 t
          当然这还是一个简答的应用,比如我这次项目中用的CaseWhen的使用方法。就用到了条件筛选和SQL语句,比如我要查询2014年叫lisi的人有多少,2015年lisi的人有多少。那么下边的语句就能帮我简单的实现

    select to_char(t.birthday ,'yyyy'),
      sum(case when to_char(t.birthday ,'yyyy')= '2014' and t.name = 'lisi' then 1
      when to_char(t.birthday ,'yyyy')= '2015' and t.name = 'lisi' then 1
      else 0
      end) as firYear
    from test1 t group by to_char(t.birthday ,'yyyy');
          大家自己观察发现我在上边用到了Group by来进行分组。由于假设没有这个的话,查询出来的结果例如以下图  

           

          可是假设使用了group by分组的话,效果例如以下

          

          实现的效果不一样,所以大家须要什么样子的表格。就怎么查询就能够。

          事实上上边说了这么多,好像就是一个if...else...,可是这个是全部数据库都能够实现的。可是在Oracle。另一个类似于咱们的三目运算的一个小语法。

    select decode(sex, 'M', 'Male', 'F', 'Female', 'Unknown')
    from   employees;
          当然假设咱们的逻辑简单能够用这个,只是逻辑略微复杂一些的建议不要用,感觉没有CaseWhen的逻辑清晰,并且代码的移植性也不太好。毕竟仅仅有Oracle能用。

          总结一下,假设我们须要在数据库中进行逻辑推断。不防用一下咱们的CaseWhen,或者Oracle的decode。加上group by 效果更佳。

     

  • 相关阅读:
    2017上半年技术文章集合【Android】—184篇文章分类汇总
    一个高仿闲鱼键自定义数字键盘特效
    Android智能下拉刷新加载框架—看这些就够了
    深入了解Android蓝牙Bluetooth——《进阶篇》
    with和爬虫基础
    数据类型
    变量及注释
    计算机基础知识
    Markdown使用
    3732: Network
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7045380.html
Copyright © 2011-2022 走看看