1. 程式人生 > >SQL之case表示式總結之一:構造新列並按新列彙總

SQL之case表示式總結之一:構造新列並按新列彙總

一.case表示式概述: case表示式有簡單case表示式(simple case expression)和搜尋case表示式(searched case expression).case表示式是一個標量表達式,返回一個基於條件的邏輯值,千萬注意:case表示式不是一個程式設計的分支語句,它不能控制程式流.兩種表示式的語法如下:  
--簡單case表示式語法
case
gender when 1 then '' when 0 then '' else 'uk' end
--搜尋case表示式
case when gender = 1 then '' when gender = 0 then '' else 'uk' end

 

簡單case表示式寫法簡單,能實現的功能也很少,簡單case表示式能寫的條件,搜尋case表示式也能寫,所以這裡主要介紹搜尋case表示式. 在case表示式裡,還可以使用between,like,和比較運算子等,還能巢狀子查詢的in和exists謂詞,因此,case表示式具有非常強的表達能力. 二.使用case表示式需要注意的事項 1.各分支返回資料型別的一致性 2.end關鍵寫是與case關鍵字配對的,不能省略 3.養成寫else子句的習慣 三.例項演練 [應用]:根據已有欄位來構造新欄位,並按新構造的欄位統計資料: [例項一]:現有這樣一個樣本表,要求按照各省份對應的區域來按性別彙總人口數量
在select 語句中構造一個新欄位[區域]
彙總後效果:
程式碼演練如下:
--第一步:在demo資料庫中建立一張資料表 test-------------------------------------------------------------------------------------
use demo
go
if OBJECT_ID('test') is not null
drop table test
go
create
table test ( province nvarchar(50), city nvarchar(50), town nvarchar(50), area decimal(18,2), shot nvarchar(50), gender int, person decimal(18,2) ) go --第二步:利用bulk insert語句把excel表整體匯入至資料表 test----------------------------------------------------------------------- bulk insert test from 'E:\Thb\個人課件\0_Files\行政區人口test.csv' with ( fieldterminator=',', rowterminator='\n', firstrow=2 ) go --第三步:建立一個cte,用於存放中間結果,使程式碼更具有閱讀性--------------------------------------------------------- with temp as ( SELECT CASE WHEN province IN('黑龍江省','吉林省','遼寧省') then '東北地區' WHEN province IN('北京市','天津市','河北省','山西省','內蒙古自治區') then '華北地區' WHEN province IN('河南省','湖北省','湖南省') then '華中地區' WHEN province IN('山東省','江蘇省','安徽省','上海市','浙江省','江西省','福建省','臺灣省') then '華東地區' WHEN province IN('廣東省','廣西壯族自治區','海南省','香港特別行政區','澳門特別行政區') then '華南地區' WHEN province IN('陝西省','甘肅省','寧夏回族自治區','青海省','新疆維吾爾自治區') then '西北地區' WHEN province IN('四川省','貴州省','雲南省','重慶市','西藏自治區') then '西南地區' ELSE 'UK' END AS 區域,province,city,town,area,shot,gender,person from test ) --第四步:最終sql語句------------------------------------------------------------------------------------------ SELECT 區域, sum(CASE WHEN gender=1 then person else 0 end) as '男性人口', SUM(CASE WHEN gender=0 then person else 0 end) as '女性人口' FROM temp GROUP BY 區域 UNION ALL SELECT '合計', sum(CASE WHEN gender=1 then person else 0 end), SUM(CASE WHEN gender=0 then person else 0 end) FROM temp
[例項二],接上例,根據省份的面積來劃分等級[>1000000為特大面積省份,>500000為大面積省份,>200000為中等面積省份,>100000為小面積省份,<=100000為特小面積省份] 最終結果:

相關推薦

SQLcase表示式總結之一:構造彙總

一.case表示式概述: case表示式有簡單case表示式(simple case expression)和搜尋case表示式(searched case expression).case表示式是一個標量表達式,返回一個基於條件的邏輯值,千萬注意:case表示式不是一個程式設計的分支語句,它不能

SQLCASE表示式總結二:利用CASE語句來更新欄位的值

可以在UPDATE語句中使用CASE表示式來方便的更新欄位的值 例項:有如下工資表: 要求: (1)對目前工資為30000元以上的員工,降薪10% (2)對目前工資為25000元以上且不滿28000元的員工,加薪20% (3)上述條件以外的情形的員工,保持不變 [分析]:按照常規思路,直接對資

神奇的 SQL CASE表示式,妙用多多 !

前言   歷史考試選擇題:黃花崗起義第一槍誰開的? A宋教仁 B孫中山 C黃興 D徐錫麟,考生選C。   又看第二題:黃花崗起義第二槍誰開的? 考生傻了,就選了個B。   接著看第三題:黃花崗起義中,第三槍誰開的? 考生瘋了,胡亂選了A。   考試出來就去找出卷老師。老師拿出課本說:黃興連開三槍,揭開

SQLCASE WHEN用法詳解(CASE WHEN使用總結

簡單CASE WHEN函式: CASE SCORE WHEN 'A' THEN '優' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END CASE SCORE WHEN 'C' THEN '中' ELSE

SQLcase when then用法(用於分類統計)

char purge 格式 但是 統計 spa 比較 log 永遠 ase具有兩種格式。簡單case函數和case搜索函數。 --簡單case函數 case sex when ‘1‘ then ‘男‘ when ‘2‘ then ‘女’

SQLcase when

參考 技術分享 搜索 fec country nbsp lec center then 大致學習了下SQL的功能語句,case when 類似於c語言中的switich case語句,多分支選擇,不同的值可以有不同的返回量。比如,在一個包含了sex字段的表中,可能的值為1、

SQLcase when then用法

case具有兩種格式:                              簡單case函式;                             case搜尋函式; --簡單case函式 case sex when '1' then '男' when

Oracle SQL 條件表示式

                     前言在Oracle中,我們有兩種方式可以實現 IF-THEN-ELSE  的邏輯:CASE  語句 或者 DECODE 函式 相比較來說DECODE 函式會更加的簡潔。我們在oracle資料庫中建立一個user_info表:CREATE TABLE user_info

SQLcase when 總結

SQL 中case when 總結 SQL 中case when 總結 簡單case 函式語法 Case搜尋函式語法 例項 簡單的梳理一下case

【統計】SQLcase when then else end用法(用於分類統計)(一)

case具有兩種格式。簡單case函式和case搜尋函式。--簡單case函式 case sex when '1' then '男' when '2' then '女’ else '其他' end --case搜尋函式 case when sex = '1' th

sqlcase when用法詳解

簡單CASE WHEN函式只能應對一些簡單的業務場景,而CASE WHEN條件表示式的寫法則更加靈活。 CASE WHEN條件表

基礎 | Java8特性Lambda表示式

Lambda表示式是Java8所引入的新特性之一,其基於函式式介面,以極大地減少程式碼冗餘,並提高程式碼的可讀性。 Lambda表示式的基本語法 參考答案: Java8中引入箭頭操作符(也叫Lambda操作符)將Lambda表示式拆分成左右兩部分: 左

Java8特性Lambda表示式學習二

大家好,又來到超超部落格大本營啦!歡迎大家...... 上一章我們講解了Lambda表示式的基礎語法,引數列表、變數等知識點,接下來我們接續探究Lambda的表示式、以及其中的方法引用。 一、Lambda的表示式: (1)如果表示式只有一行,那麼可以直接寫(不需要{}); (2)

Java8特性Lambda表示式學習一

       剛畢業入職新工作,在職崗位培訓時,老師在操作集合老使用Lambda表示式。這使一個之前完全沒有接觸過Lambda表示式的少年甚是苦惱,看不懂,閒餘時間決定搞一搞Lambda表示式到底是啥東西?底層原理怎麼實現的,接下來我將我的學習成果一起分享

java8特性lamda表示式應用java策略模式

java8的lamda表示式提供了有四種最常用的函式式介面型別:簡單理解函式式介面:就是介面中只有一個抽象方法的介面 1:消費型介面:Consumer  有入參 無返回介面 2:供給型介面:Supplier   無入參 有返回結果 3:function介面:

Java8特性lambda表示式

     在瞭解lambda表示式之前,必須先了解函數語言程式設計、函式式介面和default方法。在Java8出來之前,別的程式語言中已經有了函數語言程式設計這種概念,只不過後來沒落了,不過在最近幾年又火起來了。在Java8中大力提倡我們使用函數語言程式設計,並且更新了一些

sql語句 CASE WHEN 搜尋語句

今天查詢資料庫時遇到一個問題,一個表中存了三種不同狀態的的記錄,即倉庫日誌表裡存了 領出,報廢,歸還三個狀態的欄位,而我需要做的操作是統計出一個人的領用總數量,報廢總數量,和歸還總數量,自己用了很多種方法,但都行不通,最後還是大神提供了case when語句才得以解決,所以寫

Java8特性Lambda表示式解析及其常見用法

Lambda表示式是Java8更新的一大新特性,與同期更新的Stream是此版本的最大亮點。 “這是你從來沒有玩過的全新版本” —– 扎扎輝 -> 舉個栗子 : 建立一個執行緒 //old Thread thread1 = new Thread(

sql聚合函式使用總結

Having是一個經常與聚合函式搭配使用的關鍵字。它的作用是篩選滿足條件的組,即在分組之後過濾資料,條件中經常包含聚合函式什麼是聚合函式?聚合函式一般會出現在哪?顧名思義,聚合函式就是按照某種規則將特定欄位進行規約,常見的聚合函式如:(1)求個數:count(2)求總和:su

SQL case when then end根據某資料內容在顯示自定義內容 SQL利用Case When Then多條件判斷SQL 語句

select ID,Username,namer=(case when(score<='50') then '實習' when(score>'50' and score<='500' ) then