SQL:CASE WHEN使用詳解

文章目錄

      • 1. 數據轉換與映射
      • 2. 動態條件篩選
      • 3. 多條件分組統計
      • 4. 數據排名與分級
      • 5. 處理空值與默認值
      • 6. 動態排序

CASE WHEN 語句在 SQL 中是一個非常強大且靈活的工具,除了常規的條件判斷外,還有很多巧妙的用法,以下為你詳細總結:

1. 數據轉換與映射

  • 用途:將一列中的值根據特定規則映射為其他值,常用于數據清洗和標準化。
  • 示例:假設有一個 products 表,其中 category 列包含值 'electronics''clothing' 等,要將這些英文類別轉換為中文。
SELECT product_id,category,CASE categoryWHEN 'electronics' THEN '電子產品'WHEN 'clothing' THEN '服裝'ELSE '其他'END AS chinese_category
FROM products;

2. 動態條件篩選

  • 用途:根據不同的條件動態篩選數據,實現類似參數化查詢的功能。
  • 示例:假設有一個 orders 表,包含 order_dateamount 列,要根據不同的時間范圍篩選出不同金額的訂單。
SELECT order_id,order_date,amount
FROM orders
WHERE CASE WHEN MONTH(order_date) BETWEEN 1 AND 6 THEN amount > 100WHEN MONTH(order_date) BETWEEN 7 AND 12 THEN amount > 200ELSE 1 = 1  -- 不篩選END;

3. 多條件分組統計

  • 用途:結合聚合函數,根據多個條件對數據進行分組統計。
  • 示例:假設有一個 employees 表,包含 departmentsalary 列,要統計不同部門不同薪水范圍的員工數量。
SELECT department,SUM(CASE WHEN salary < 3000 THEN 1 ELSE 0 END) AS low_salary_count,SUM(CASE WHEN salary >= 3000 AND salary < 6000 THEN 1 ELSE 0 END) AS medium_salary_count,SUM(CASE WHEN salary >= 6000 THEN 1 ELSE 0 END) AS high_salary_count
FROM employees
GROUP BY department;

4. 數據排名與分級

  • 用途:根據某列的值對數據進行排名或分級。
  • 示例:假設有一個 students 表,包含 student_idscore 列,要根據成績對學生進行分級。
SELECT student_id,score,CASE WHEN score >= 90 THEN 'A'WHEN score >= 80 THEN 'B'WHEN score >= 70 THEN 'C'WHEN score >= 60 THEN 'D'ELSE 'F'END AS grade
FROM students;

5. 處理空值與默認值

  • 用途:在查詢結果中對空值進行處理,為其設置默認值。
  • 示例:假設有一個 customers 表,包含 customer_nameemail 列,若 email 為空,則顯示默認值 '未提供郵箱'
SELECT customer_name,CASE WHEN email IS NULL THEN '未提供郵箱'ELSE emailEND AS email_info
FROM customers;

6. 動態排序

  • 用途:根據不同的條件對查詢結果進行動態排序。
  • 示例:假設有一個 products 表,包含 product_namepricesales_volume 列,要根據不同的條件對產品進行排序。
SELECT product_name,price,sales_volume
FROM products
ORDER BY CASE WHEN 'price' = 'price' THEN priceWHEN 'sales_volume' = 'sales_volume' THEN sales_volumeELSE product_nameEND;

這些巧妙用法可以讓你在處理復雜的 SQL 查詢時更加靈活和高效,根據具體的業務需求選擇合適的用法來實現所需的功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75033.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75033.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75033.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【字符設備驅動開發–IMX6ULL】(二)Linux 設備號

【字符設備驅動開發–IMX6ULL】&#xff08;二&#xff09;Linux 設備號 文章目錄 【字符設備驅動開發–IMX6ULL】&#xff08;二&#xff09;Linux 設備號1 設備號的組成2.設備號的分配 1 設備號的組成 為了方便管理&#xff0c;Linux 中每個設備都有一個設備號&#xff0c;設…

【字符設備驅動開發–IMX6ULL】(一)簡介

【字符設備驅動開發–IMX6ULL】&#xff08;一&#xff09;簡介 一、Linux驅動與裸機開發區別 1.裸機驅動開發回顧 ? 1、底層&#xff0c;跟寄存器打交道&#xff0c;有些MCU提供了庫。 spi.c&#xff1a;主機驅動&#xff08;換成任何一個設備之后只需要調用此文件里面的…

YOLOv8+ Deepsort+Pyqt5車速檢測系統

該系統通過YOLOv8進行高效的目標檢測與分割&#xff0c;結合DeepSORT算法完成目標的實時跟蹤&#xff0c;并利用GPU加速技術提升處理速度。系統支持模塊化設計&#xff0c;可導入其他權重文件以適應不同場景需求&#xff0c;同時提供自定義配置選項&#xff0c;如顯示標簽和保存…

藍橋杯嵌入式學習筆記

用博客來記錄一下參加藍橋杯嵌入式第十六屆省賽的學習經歷 工具環境準備cubemx配置外部高速時鐘使能設置串口時鐘配置項目配置 keil配置燒錄方式注意代碼規范頭文件配置 模塊ledcubemx配置keil代碼實現點亮一只燈實現具體操作的燈&#xff0c;以及點亮還是熄滅 按鍵cubemx配置k…

ARCGIS PRO SDK VB2022 圖層要素類類型判斷

arcgis pro 常見要素類類型有以下幾種&#xff1a; FeatureLayer ——要素圖層&#xff08;矢量數據&#xff09; RasterLayer ——柵格圖層 MapImageLayer ——地圖圖像圖層 VectorTileLayer ——矢量切片圖層 SceneLayer …

【hadoop】遠程調試環境

根據上一節&#xff0c;我們已經安裝完成hadoop偽分布式環境 hadoop集群環境配置_jdk1.8 441-CSDN博客 還沒安裝的小伙伴可以看看這個帖子 這一節我們要實現使用vscode進行遠程連接&#xff0c;并且完成java配置與測試 目錄 vscode 配置遠程 安裝java插件 新建java項目 …

Java版Manus實現來了,Spring AI Alibaba發布開源OpenManus實現

此次官方發布的 Spring AI Alibaba OpenManus 實現&#xff0c;包含完整的多智能體任務規劃、思考與執行流程&#xff0c;可以讓開發者體驗 Java 版本的多智能體效果。它能夠根據用戶的問題進行分析&#xff0c;操作瀏覽器&#xff0c;執行代碼等來完成復雜任務等。 項目源碼及…

【Linux網絡與網絡編程】02.初識Socket編程

1. 數據傳輸的目的 前一篇文章中我們講解了網絡傳輸的流程&#xff0c;那么網絡傳輸的目的是什么呢&#xff1f;難道我們只是將數據從一臺主機傳輸到另一臺主機嗎&#xff1f; 當然不是的&#xff01;因為數據是給人用的。比如&#xff1a;聊天是人在聊天&#xff0c;下載是人…

電腦連不上手機熱點會出現的小bug

一、問題展示 注意: 不要打開 隱藏熱點 否則他就會在電腦上 找不到自己的熱點 二、解決辦法 把隱藏熱點打開即可

CUDA專題3:為什么GPU能改變計算?深度剖析架構、CUDA?與可擴展編程

1. 簡介 1.1. 使用 GPU 的優勢 圖形處理器(GPU)在相近的成本和功耗范圍內,能夠提供比中央處理器(CPU)更高的指令吞吐量和內存帶寬。許多應用程序利用這些優勢,在 GPU 上的運行速度遠超 CPU(參見《GPU 應用》)。其他計算設備(如 FPGA)雖然能效也很高,但其編程靈活性…

Linux輸入系統應用編程

什么是輸入系統 Linux 輸入系統是處理用戶輸入設備(如鍵盤、鼠標、觸摸屏、游戲手柄等)的軟件架構。在應用編程層面&#xff0c;它提供了與這些輸入設備交互的接口。 主要組成部分 輸入設備驅動層&#xff1a;直接與硬件交互的驅動程序 輸入核心層&#xff1a;內核中的輸入子…

StarRocks BE宕機排查

StarRocks BE宕機排查 排查是否OOM dmesg -T|grep -i oom #排查是否oom原因&#xff1a; 2.X版本OOM原因 BE 的配置文件 (be.conf) 中 mem_limit 配置不合理&#xff0c;需要配置mem_limit(機器總內存-其他服務占用內存-1~2g(系統預留)) 比如機器內存40G&#xff0c;上面有…

邏輯回歸(Logistic Regression)模型的概率預測函數

以二分類問題為例&#xff0c;常見的損失函數有 負對數似然損失(neg log-likelihood loss)&#xff0c;交叉熵損失(cross entropy loss)&#xff0c;deviance loss指數損失(exponential loss)。 前三者雖然名字不同&#xff0c;但卻具有相同的表達形式。此外&#xff0c;neg …

函數式組件中的渲染函數 JSX

在 Vue.js 和 React 等現代前端框架中&#xff0c;函數式組件已成為一種非常流行的設計模式。函數式組件是一種沒有內部狀態和生命周期方法的組件&#xff0c;其主要功能是接受 props 并渲染 UI。隨著這些框架的演進&#xff0c;渲染函數和 JSX&#xff08;JavaScript XML&…

Android 動態設置默認Launcher(默認應用 電話-短信-瀏覽器-主屏幕應用))

Android 動態設置默認Launcher(默認應用 電話-短信-瀏覽器-主屏幕應用&#xff09;) 文章目錄 場景需求參考資料思路期待效果 實現方案源碼流程分析和思路實現DefaultAppActivityHandheldDefaultAppFragmentHandheldDefaultAppPreferenceFragmentDefaultAppChildFragmentDefaul…

Qt下載模板到本地文件內容丟失問題

上源碼 關鍵點已標注在源碼中 A, B… // 保存的文件路徑后綴QString dateTime Myapp::getCurrentTimeDescYMDHms().replace(" ", "").replace("-", "").replace(":", "");// 臨時文件名稱QString newFileName Q…

【數學建模】動態規劃算法(Dynamic Programming,簡稱DP)詳解與應用

動態規劃算法詳解與應用 文章目錄 動態規劃算法詳解與應用引言動態規劃的基本概念動態規劃的設計步驟經典動態規劃問題1. 斐波那契數列2. 背包問題3. 最長公共子序列(LCS) 動態規劃的優化技巧動態規劃的應用領域總結 引言 動態規劃(Dynamic Programming&#xff0c;簡稱DP)是一…

藍橋杯備考------>雙指針(滑動窗口)

來看哈我們這道例題 我們第一種想法應該就是暴力求解&#xff0c;枚舉每個子數組 當我們枚舉第一個數的時候&#xff0c;我們要從第一個數開始挨個枚舉每個結尾 如圖&#xff0c;以第一個數開頭的最長不重復數我們就枚舉完了 然后我們讓兩個指針全部到第二個數 再枚舉第二個…

python實現股票數據可視化

最近在做一個涉及到股票數據清洗及預測的項目&#xff0c;項目中需要用到可視化股票數據這一功能&#xff0c;這里我與大家分享一下股票數據可視化的一些基本方法。 股票數據獲取 目前&#xff0c;我已知的使用python來獲取股票數據方式有以下三種: 爬蟲獲取&#xff0c;實現…

【15】Selenium 爬取實戰

一、selenium適用場景 二、爬取目標 三、爬取列表頁 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;加載列表頁 &#xff08;3&#xff09;解析列表頁 &#xff08;4&#xff09;main 四、爬取詳情頁 &#xff08;1&#xff09;加載詳情頁 &#xff08;2…