學會了條件判斷語句case when,能幫你省很多事情!

前言:

今天的前言沒什麼好說的,你在開發中見過case-when-then else end 那你就知道某些場景很好用,沒見過的很可能很多時候你會用連表查的方式解決類似的問題。這篇文章就告訴大家case when 的一些基礎用法,讓大家感受下它的好用之處。

正文:

一、我們先舉個例子

1.建表語句

-- 班級表
CREATE TABLE example(
	id VARCHAR(20),
  name VARCHAR(20),
  birthday VARCHAR(20),
	sex VARCHAR(3),
  grade VARCHAR(20)
);

2.插入數據的語句

INSERT INTO `example` VALUES ('1', '小明', '1998-08-09', '1', '一年級');
INSERT INTO `example` VALUES ('2', '小紅', '1998-08-09', '2', '一年級');
INSERT INTO `example` VALUES ('3', '小亮', '1998-08-09', '1', '一年級');
INSERT INTO `example` VALUES ('4', '小華', '1998-08-09', '1', '一年級');
INSERT INTO `example` VALUES ('5', '小陳', '1998-08-09', '1', '二年級');
INSERT INTO `example` VALUES ('6', '小達', '1998-08-09', '2', '二年級');
INSERT INTO `example` VALUES ('7', '小打', '1998-08-09', '1', '二年級');
INSERT INTO `example` VALUES ('8', '小噠', '1998-08-09', '2', '二年級');
INSERT INTO `example` VALUES ('9', '達達', '1998-08-09', '2', '二年級');

 3.業務場景:要求按每個年級統計男生和女生的數量各是多少,統計結果的表頭爲,年級,男生數量,女生數量。(大家可以先不看後面的思路,自己寫寫,看看寫出的sql語句是什麼樣子的,然後和我給出的進行對比,看看那個好些。)

------------------------------------------------------------------答題開始-----------------------------------------------------------------------------------

 ------------------------------------------------------------------答題結束-----------------------------------------------------------------------------------

4.我先公佈第一種答案,看看和大家的是否相同或思路類似

SELECT
	a.grade AS 年級,
	a.男生數量,
	c.女生數量
FROM
	(
		SELECT
			a1.grade,
			count(*) AS 男生數量
		FROM
			example AS a1
		WHERE
			a1.sex = '1'
		GROUP BY
			a1.grade
	) AS a
LEFT JOIN (
	SELECT
		a2.grade,
		count(*) AS 女生數量
	FROM
		example AS a2
	WHERE
		a2.sex = '2'
	GROUP BY
		a2.grade
) AS c ON a.grade = c.grade

 

 5.公佈case when寫法的答案

SELECT
	grade as 年級,
	COUNT(
		CASE
		WHEN sex = 1 THEN
			1
		ELSE
			NULL
		END
	) 男生數量,
	COUNT(
		CASE
		WHEN sex = 2 THEN
			1
		ELSE
			NULL
		END
	) 女生數量
FROM
	example
GROUP BY
	grade;

 

二、講解條件判斷語句case when 的用法

1.case when具有兩種個格式

--簡單Case函數
case 字段 when 值 then 返回值 when 值2 then 返回值2 end
--舉例
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END

--Case搜索函數
case when 條件1 then 返回值1 when 條件2 then 返回值2 end
--舉例
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

2.兩者主要的區別

簡單case函數的寫法相對比較簡潔,但是和 case搜索函數相比,功能方面會有些限制,沒有搜索函數再寫條件的時候更加靈活。

3.case when的用法

Case函數只返回第一個符合條件的值,剩下的Case部分將會被自動忽略。Case when 相當於一個自定義的數據透視表,group by 是行名,case when 負責列名。

4.舉個小例子

建表語句

-- 國家人口性別表
CREATE TABLE shiyan(
	country_name VARCHAR(20),
  s_sex VARCHAR(20),
	population VARCHAR(20)
);

插入數據語句

INSERT INTO `shiyan` VALUES ('中國', '1', '340');
INSERT INTO `shiyan` VALUES ('中國', '2', '260');
INSERT INTO `shiyan` VALUES ('美國', '1', '45');
INSERT INTO `shiyan` VALUES ('美國', '2', '55');
INSERT INTO `shiyan` VALUES ('加拿大', '1', '51');
INSERT INTO `shiyan` VALUES ('加拿大', '2', '49');
INSERT INTO `shiyan` VALUES ('英國', '1', '40');
INSERT INTO `shiyan` VALUES ('英國', '2', '60');

 業務場景:按照國家和性別進行分組,sql語句

select a.country_name,
sum(case WHEN a.s_sex ='1' THEN a.population else 0 END )as 男,
sum(case WHEN a.s_sex ='2' THEN a.population else 0 END) as 女
FROM shiyan as a
GROUP BY
a.country_name

執行結果:

 

總結:

希望大家通過上面的例子可以初步瞭解case when的使用方法,如果覺得還不熟練,就趕緊多寫幾個例子吧!我們在實際開發中,不能僅僅止步寫出sql,還要考慮如何寫出性能和效率的sql,所以sql優化和性能測試,應該時刻去關注和學習,sql優化好了在面試中還能幫你很大的忙。

我是阿達,一名喜歡分享知識的程序員,時不時的也會荒腔走板的聊一聊電影、電視劇、音樂、漫畫,這裏已經有382位小夥伴在等你們啦,感興趣的就趕緊來點擊關注我把,哪裏有不明白或有不同觀點的地方歡迎留言!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章