最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

?SQL 中 CASE 表達式的使用方式

 更新時間:2022年09月19日 10:22:57   作者:Wang1???????  
這篇文章主要介紹了?SQL 中 CASE 表達式的使用方式,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

1. 前言

CASE 表達式是從 SQL-92 標準開始被引入的。

在 CASE 表達式里,可以使用 BETWEEN 、LIKE和 < 、> 等便利的謂詞組合,以及能嵌套子查詢的 IN 和 EXISTS 謂詞。

2. 語法

CASE 表達式有 簡單 CASE 表達式(simple case expression) 和 搜索 CASE 表達式(searched case expression) 兩種寫法:

-- 簡單CASE 表達式
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他'END
-- 搜索CASE 表達式
CASE WHEN sex = '1' THEN '男'
     WHEN sex = '2' THEN '女'
ELSE '其他' END

sex 列(字段)如果是 '1' ,那么結(jié)果為男;如果是 '2' ,那么結(jié)果為女。

3. 注意點

CASE在匹配給定條件時,發(fā)現(xiàn)為真的 WHEN 子句時,CASE 表達式的真假值判斷就會中止,而剩余的 WHEN 子句會被忽略。為了避免引起不必要的混亂,使用 WHEN 子句時要注意條件的排他性。

-- 例如,這樣寫的話,結(jié)果里不會出現(xiàn)“第二”
CASE WHEN col_1 IN ('a', 'b') THEN '第一'
     WHEN col_1 IN ('a') THEN '第二'
ELSE '其他' END
  • 統(tǒng)一各分支返回的數(shù)據(jù)類型: 一定要注意 CASE 表達式里各個分支返回的數(shù)據(jù)類型是否一致。某個分支返回字符型,而其他分支返回數(shù)值型的寫法是不正確的。
  • 不要忘了寫 END: 不寫END是語法錯誤,這是不允許的。
  • 養(yǎng)成寫 ELSE 子句的習慣: 與 END 不同,ELSE 子句是可選的,不寫也不會出錯。不寫 ELSE 子句時,CASE 表達式的執(zhí)行結(jié)果是 NULL 。

4. 分類匯總數(shù)據(jù)

SELECT 
    CASE pref_name 
        WHEN '德島' THEN '四國'
        WHEN '香川' THEN '四國'
        WHEN '愛媛' THEN '四國'
        WHEN '高知' THEN '四國'
        WHEN '福岡' THEN '九州'
        WHEN '佐賀' THEN '九州'
        WHEN '長崎' THEN '九州'
    END AS district,
    SUM(population) AS total
FROM poptbl
GROUP BY 
    CASE pref_name 
        WHEN '德島' THEN '四國'
        WHEN '香川' THEN '四國'
        WHEN '愛媛' THEN '四國'
        WHEN '高知' THEN '四國'
        WHEN '福岡' THEN '九州'
        WHEN '佐賀' THEN '九州'
        WHEN '長崎' THEN '九州'
    END;

5. 一條SQL實現(xiàn)不同條件的統(tǒng)計

SELECT
    pref_name AS '縣名',
    SUM( CASE WHEN sex=1 THEN population ELSE 0 END ) AS '男' 
    SUM( CASE WHEN sex=2 THEN population ELSE 0 END ) AS '女' 
FROM poptlb
GROUP By pref_name

6. 使用CHECK約束定義多個列的條件關系

假設某公司規(guī)定“女性員工的工資必須在 20 萬日元以下”,而在這個公司的人事表中,這條無理的規(guī)定是使用 CHECK 約束來描述的,代碼如下所示:

CONSTRAINT check_salary CHECK ( 
    CASE WHEN sex = '2' THEN 
        CASE WHEN salary <= 200000
            THEN 1 ELSE 0 END
        ELSE 1 END = 1 
)

7. 在UPDATE語句中進行條件分支

條件:

  • 對當前工資為 30 萬日元以上的員工,降薪 10%。
  • 對當前工資為 25 萬日元以上且不滿 28 萬日元的員工,加薪 20%。
UPDATE Salaries
SET salary = CASE WHEN salary>300000 THEN salary*0.9
                  WHEN salary>=250000 AND salary <280000 THEN salary * 1.2
                  ELSE salary
             END;

8. 生成交叉表

--- 使用IN謂詞
SELECT
    course_name AS '課程名',
    CASE WHEN courese_id IN (SELECT course_id FROM open_course WHERE mouth = '200706')
            THEN 'o' 
            ELSE 'x' 
    END AS '6 月'
    CASE WHEN courese_id IN (SELECT course_id FROM open_course WHERE mouth = '200707')
            THEN 'o' 
            ELSE 'x' 
    END AS '7 月'
    CASE WHEN courese_id IN (SELECT course_id FROM open_course WHERE mouth = '200708')
            THEN 'o' 
            ELSE 'x' 
    END AS '8 月'
FROM course_master;

--- 或者使用EXIST謂詞
SELECT CM.course_name,
    CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200706 AND OC.course_id = CM.course_id) 
        THEN '○' ELSE '×' 
    END AS "6 月",
    CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200707 AND OC.course_id = CM.course_id) 
        THEN '○' ELSE '×' 
    END AS "7 月",
    CASE WHEN EXISTS (SELECT course_id FROM OpenCourses OC WHERE month = 200708 AND OC.course_id = CM.course_id) 
        THEN '○' ELSE '×' 
    END AS "8 月"
FROM CourseMaster CM;

9. CASE表達式中使用聚合函數(shù)

對于加入了多個社團的學生,通過將其“主社團標志”列設置為 Y 或者 N 來表明哪一個社團是他的主社團;對于只加入了一個社團的學生,將其“主社團標志”列設置為 N。

現(xiàn)需要查詢出所有學生加入的社團,若加入了多個則顯示主社團

SELECT 
    std_id,
    CASE WHEN COUNT(*)==1 THEN MAX(club_id) 
         ELSE MAX(CASE WHEN main_club_flg = 'Y' THEN club_id ELSE NULL END)
    END AS 'main_club'
FROM student_club
GROUP BY std_id

10. 按照自定義規(guī)則排序列

按照mark列排序,要求修正a b c d 的權重為 c b a d

SELECT
    mark
FROM 
    sort_test
ORDER BY
    CASE mark
        WHEN 'a' THEN -1
        WHEN 'b' THEN 1
        WHEN 'c' THEN 2
        WHEN 'd' THEN -2
    END 

到此這篇關于 SQL 中 CASE 表達式的使用方式的文章就介紹到這了,更多相關 SQL CASE 表達式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL字符串前綴索引使用

    MySQL字符串前綴索引使用

    本文主要介紹了MySQL字符串前綴索引使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • mysql中distinct和group?by的區(qū)別淺析

    mysql中distinct和group?by的區(qū)別淺析

    distinct簡單來說就是用來去重的,而group by的設計目的則是用來聚合統(tǒng)計的,兩者在能夠?qū)崿F(xiàn)的功能上有些相同之處,但應該仔細區(qū)分,下面這篇文章主要給大家介紹了關于mysql中distinct和group?by區(qū)別的相關資料,需要的朋友可以參考下
    2023-05-05
  • SQL查詢之字段是逗號分隔開的數(shù)組如何查詢匹配數(shù)據(jù)問題

    SQL查詢之字段是逗號分隔開的數(shù)組如何查詢匹配數(shù)據(jù)問題

    這篇文章主要介紹了SQL查詢之字段是逗號分隔開的數(shù)組如何查詢匹配數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 解決mysql不能插入中文Incorrect string value

    解決mysql不能插入中文Incorrect string value

    首先我的配置文件的設置的默認字符集是utf8即
    2009-05-05
  • MySQL中@i:=@i+1表達式用法詳解

    MySQL中@i:=@i+1表達式用法詳解

    這篇文章主要給大家介紹了關于MySQL中@i:=@i+1表達式用法的相關資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用mysql具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • MySQL查詢優(yōu)化之索引的應用詳解

    MySQL查詢優(yōu)化之索引的應用詳解

    本篇文章是對MySQL查詢優(yōu)化中索引的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL數(shù)據(jù)庫innodb啟動失敗無法重啟的解決方法

    MySQL數(shù)據(jù)庫innodb啟動失敗無法重啟的解決方法

    這篇文章給大家分享了MySQL數(shù)據(jù)庫innodb啟動失敗無法重啟的解決方法,通過總結(jié)自己遇到的問題分享給大家,讓遇到同樣問題的朋友們可以盡快解決,下面來一起看看吧。
    2016-09-09
  • Mysql用戶創(chuàng)建以及權限賦予操作的實現(xiàn)

    Mysql用戶創(chuàng)建以及權限賦予操作的實現(xiàn)

    在MySQL中,創(chuàng)建新用戶并為其授予權限是一項常見的操作,本文主要介紹了Mysql用戶創(chuàng)建以及權限賦予操作的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • MySQL存儲引擎MyISAM與InnoDB區(qū)別總結(jié)整理

    MySQL存儲引擎MyISAM與InnoDB區(qū)別總結(jié)整理

    今天小編就為大家分享一篇關于MySQL存儲引擎MyISAM與InnoDB區(qū)別總結(jié)整理,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL性能設置

    MySQL性能設置

    網(wǎng)站訪問量越來越大,MySQL自然成為瓶頸,因此最近我一直在研究 MySQL 的優(yōu)化,第一步自然想到的是 MySQL 系統(tǒng)參數(shù)的優(yōu)化
    2006-12-12

最新評論

奇台县| 三原县| 佳木斯市| 民权县| 司法| 陈巴尔虎旗| 东丰县| 沙湾县| 栾城县| 堆龙德庆县| 栖霞市| 故城县| 滦平县| 定日县| 磐石市| 略阳县| 扎囊县| 桐梓县| 肇州县| 屯昌县| 禹州市| 马龙县| 保山市| 沾化县| 北辰区| 兰坪| 大方县| 天台县| 海南省| 沙雅县| 福鼎市| 保康县| 隆昌县| 朝阳县| 长泰县| 扶绥县| 洛隆县| 唐河县| 项城市| 鹤峰县| 澄迈县|