• oracleI基础入门(11)case Crazy


    CASE
    CASE 是 SQL 用来做为 if-then-else 之类逻辑的关键字。 CASE 的语法如下:
    SELECT CASE ("栏位名") WHEN "条件1" THEN "结果1" WHEN "条件2" THEN "结果2"...
    [ELSE "结果N"]ENDFROM "表格名"
    "条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。
    在我们的 Store_Information 中
    Store_Information 表格
    store_name                Sales                Date
    Los Angeles               $1500                Jan-05-1999
    San Diego                 $250                   Jan-07-1999
    San Francisco            $300                  Jan-08-1999
    Boston                      $700                   Jan-08-1999
    若我们要将 'Los Angeles' 的 Sales 数值乘以2,以及将 'San Diego' 的 Sales 数值乘以1.5,
    我们就键入以下的 SQL:
    SELECT store_name, CASE store_name
    WHEN 'Los Angeles' THEN Sales * 2
    WHEN 'San Diego' THEN Sales * 1.5
    ELSE Sales
    END
    "New Sales",
    Date
    FROM Store_Information
    "New Sales" 是用到 CASE 那个栏位的栏位名。
    结果:
    store_name New Sales Date
    Los Angeles $3000 Jan-05-1999
    San Diego $375 Jan-07-1999
    San Francisco $300 Jan-08-1999
    Boston $700 Jan-08-1999
    算排名
    列出每一行的排名是一个常见的需求,可惜 SQL 并没有一个很直接的方式达到这个需求。
    要以 SQL 列出排名,基本的概念是要做一个表格自我连结 (self join),将结果依序列出,
    然后算出每一行之前 (包含那一行本身) 有多少行数。这样讲读者听得可能有点困惑,所以
    最好的方式是用一个实例来介绍。假设我们有以下的表格:
    Total_Sales 表格
    Name Sales
    John 10
    Jennifer 15
    Stella 20
    Sophia 40
    Greg 50
    Jeff 20
    要找出每一行的排名,我们就打入以下的 SQL 语句:
    SELECT a1.Name, a1.Sales, COUNT(a2.sales) Sales_Rank
    FROM Total_Sales a1, Total_Sales a2
    WHERE a1.Sales <= a2.Sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
    GROUP BY a1.Name, a1.Sales
    ORDER BY a1.Sales DESC, a1.Name DESC;
    结果:
    Name Sales Sales_Rank
    Greg 50 1
    Sophia 40 2
    Stella 20 3
    Jeff 20 3
    Jennifer 15 5
    John 10 6
    我们先来看 WHERE 子句。在字句的第一部分 (a1.Sales <= a2.Sales),我们算出有多少笔资
    料 Sales 栏位的值是比自己本身的值小或是相等。如果在 Sales 栏位中没有同样大小的资
    料,那这部分的 WHERE 子句本身就可以产生出正确的排名。
    子句的第二部分,(a1.Sales=a2.Sales and a1.Name = a2.Name),则是让我们在 Sales 栏位中
    有同样大小的资料时 (像 Stella 及 Jeff 这两笔资料),仍然能够产生正确的排名。

  • 相关阅读:
    [Xcode 实际操作]六、媒体与动画-(17)使用MediaPlayer框架播放视频
    [Xcode 实际操作]六、媒体与动画-(16)实现音乐的背景播放
    [Xcode 实际操作]六、媒体与动画-(15)使用AudioPlayer播放音乐
    [Xcode 实际操作]六、媒体与动画-(14)使用SystemSoundId播放简短声音
    [Xcode 实际操作]六、媒体与动画-(13)使用UIImageView制作帧动画
    [Swift]LeetCode148. 排序链表 | Sort List
    [Swift]LeetCode147. 对链表进行插入排序 | Insertion Sort List
    [Swift]LeetCode146. LRU缓存机制 | LRU Cache
    【POJ3615】Cow Hurdles 最短路,你若LCA,我仍不拦你。
    How MapReduce Works
  • 原文地址:https://www.cnblogs.com/flyscan/p/2545964.html
Copyright © 2020-2023  润新知