zoukankan      html  css  js  c++  java
  • 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 这两笔资料),仍然能够产生正确的排名。

  • 相关阅读:
    mouse without borders无界鼠标使用教程
    动态令牌-(OTP,HOTP,TOTP)-基本原理
    sha256C代码例子
    常用的前端设计工具分享
    PHP获取搜索引擎关键字来源(百度、谷歌、雅虎、搜狗、搜搜、必应、有道)
    为 Web 设计师准备的 25+ 款扁平 UI 工具包
    万能字段使用技巧整理
    css中overflow:hidden的属性 可能会导致js下拉菜单无法显示
    QQ空间g_tk加密算法PHP版
    QQ聊天机器人for PHP版 (登录,收、发消息)
  • 原文地址:https://www.cnblogs.com/flyscan/p/2545964.html
Copyright © 2011-2022 走看看