MySQL中Case?When用法及說明
最近,在學習Hive基礎知識時,遇到了遇到了Case When Else End語法,以前學習MySQL時忽略了這部分知識點,現(xiàn)總結一下相關的知識給大家。
首先練習一個例子如下:
一、學生課程成績統(tǒng)計
1) 建表
use hiveDemo; CREATE TABLE `course` ( `id` int, `sid` int , `course` string, `score` int ) ;
2) 插入數(shù)據(jù)
// 字段解釋:id, 學號, 課程, 成績 INSERT INTO `course` VALUES (1, 1, 'yuwen', 43); INSERT INTO `course` VALUES (2, 1, 'shuxue', 55); INSERT INTO `course` VALUES (3, 2, 'yuwen', 77); INSERT INTO `course` VALUES (4, 2, 'shuxue', 88); INSERT INTO `course` VALUES (5, 3, 'yuwen', 98); INSERT INTO `course` VALUES (6, 3, 'shuxue', 65);
3) 需求
求:所有數(shù)學課程成績 大于 語文課程成績的學生的學號
最開始的想法是打算同過自連接的方式來解決,后來咨詢了公司的同事,知道了可以case可以用來解決此問題。
a. 使用case...when...將不同的課程名稱轉換成不同的列。
create view tmp_course_view as select sid, case course when "shuxue" then score else 0 end as shuxue, case course when "yuwen" then score else 0 end as yuwen from course; select * from tmp_course_view;
b. 以sid分組合并取各成績最大值
create view tmp_course_view1 as select aa.sid, max(aa.shuxue) as shuxue, max(aa.yuwen) as yuwen from tmp_course_view aa group by sid; select * from tmp_course_view1;
c. 比較結果
select * from tmp_course_view1 where shuxue > yuwen;
二、Case When Else End用法詳解
1) 更新
update table set 字段1=case when 條件1 then 值1 when 條件2 then 值2 else 值3 end where ……
2) 查詢
select 字段1, 字段2, case 字段3 when 值1 then 新值 when 值2 then 新值 end as 重新命名字段3的名字 from table where …… order by ……
在一般的SELECT中,其語法如下:
sql 中 case when 語法在這里添加日志標題 - 錢途無梁 - Notebook of 錢途無梁SELECT <myColumnSpec> =? sql 中 case when 語法在這里添加日志標題 - 錢途無梁 - Notebook of 錢途無梁CASE? sql 中 case when 語法在這里添加日志標題 - 錢途無梁 - Notebook of 錢途無梁WHEN <A> THEN <somethingA>? sql 中 case when 語法在這里添加日志標題 - 錢途無梁 - Notebook of 錢途無梁WHEN <B> THEN <somethingB>? sql 中 case when 語法在這里添加日志標題 - 錢途無梁 - Notebook of 錢途無梁ELSE <somethingE>? sql 中 case when 語法在這里添加日志標題 - 錢途無梁 - Notebook of 錢途無梁END?
CASE可能是 SQL 中被誤用最多的關鍵字之一。
雖然你可能以前用過這個關鍵字來創(chuàng)建字段,但是它還具有更多用法。
例如,你可以在 WHERE、GROUP BY和Order By子句中使用CASE。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
巧用mysql提示符prompt清晰管理數(shù)據(jù)庫的方法
隨著管理mysql服務器越來越多,同樣的mysql>的提示符有可能會讓你輸入錯誤的命令到錯誤的數(shù)據(jù)庫,這時候需要巧用mysql的提示符,這是我的提示符root@localhost(mysql) 08:55:21> 用prompt命令實現(xiàn)(適用于windows和linux環(huán)境)2009-08-08