日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql case when用法

發布時間:2024/3/12 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql case when用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL 的 case when 的語法有兩種:

  • 簡單函數
    CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
  • 搜索函數
    CASE WHEN [expr] THEN [result1]…ELSE [default] END

這兩種語法有什么區別呢?

簡單函數
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END: 枚舉這個字段所有可能的值*

SELECT
NAME ‘英雄’,
CASE NAME
WHEN ‘德萊文’ THEN
‘斧子’
WHEN ‘德瑪西亞-蓋倫’ THEN
‘大寶劍’
WHEN ‘暗夜獵手-VN’ THEN
‘弩’
ELSE
‘無’
END ‘裝備’
FROM
user_info;

SELECT
NAME ‘英雄’,
CASE NAME
WHEN ‘德萊文’ THEN
‘斧子’
WHEN ‘德瑪西亞-蓋倫’ THEN
‘大寶劍’
WHEN ‘暗夜獵手-VN’ THEN
‘弩’
ELSE
‘無’
END ‘裝備’
FROM
user_info;

搜索函數
CASE WHEN [expr] THEN [result1]…ELSE [default] END:搜索函數可以寫判斷,并且搜索函數只會返回第一個符合條件的值,其他case被忽略

when 表達式中可以使用 and 連接條件
SELECT
NAME ‘英雄’,
age ‘年齡’,
CASE
WHEN age < 18 THEN
‘少年’
WHEN age < 30 THEN
‘青年’
WHEN age >= 30
AND age < 50 THEN
‘中年’
ELSE
‘老年’
END ‘狀態’
FROM
user_info;

聚合函數 sum 配合 case when 的簡單函數實現行轉列
SELECT
st.stu_id ‘學號’,
st.stu_name ‘姓名’,
sum(
CASE co.course_name
WHEN ‘大學語文’ THEN
sc.scores
ELSE
0
END
) ‘大學語文’,
sum(
CASE co.course_name
WHEN ‘新視野英語’ THEN
sc.scores
ELSE
0
END
) ‘新視野英語’,
sum(
CASE co.course_name
WHEN ‘離散數學’ THEN
sc.scores
ELSE
0
END
) ‘離散數學’,
sum(
CASE co.course_name
WHEN ‘概率論與數理統計’ THEN
sc.scores
ELSE
0
END
) ‘概率論與數理統計’,
sum(
CASE co.course_name
WHEN ‘線性代數’ THEN
sc.scores
ELSE
0
END
) ‘線性代數’,
sum(
CASE co.course_name
WHEN ‘高等數學’ THEN
sc.scores
ELSE
0
END
) ‘高等數學’
FROM
edu_student st
LEFT JOIN edu_score sc ON st.stu_id = sc.stu_id
LEFT JOIN edu_courses co ON co.course_no = sc.course_no
GROUP BY
st.stu_id
ORDER BY
NULL;

行轉列測試數據
– 創建表 學生表
CREATE TABLE `edu_student` (
`stu_id` VARCHAR (16) NOT NULL COMMENT ‘學號’,
`stu_name` VARCHAR (20) NOT NULL COMMENT ‘學生姓名’,
PRIMARY KEY (`stu_id`)
) COMMENT = ‘學生表’ ENGINE = INNODB;

– 課程表
CREATE TABLE `edu_courses` (
`course_no` VARCHAR (20) NOT NULL COMMENT ‘課程編號’,
`course_name` VARCHAR (100) NOT NULL COMMENT ‘課程名稱’,
PRIMARY KEY (`course_no`)
) COMMENT = ‘課程表’ ENGINE = INNODB;

– 成績表
CREATE TABLE `edu_score` (
`stu_id` VARCHAR (16) NOT NULL COMMENT ‘學號’,
`course_no` VARCHAR (20) NOT NULL COMMENT ‘課程編號’,
`scores` FLOAT NULL DEFAULT NULL COMMENT ‘得分’,
PRIMARY KEY (`stu_id`, `course_no`)
) COMMENT = ‘成績表’ ENGINE = INNODB;

– 插入數據
– 學生表數據
INSERT INTO edu_student (stu_id, stu_name)
VALUES
(‘1001’, ‘盲僧’),
(‘1002’, ‘趙信’),
(‘1003’, ‘皇子’),
(‘1004’, ‘寒冰’),
(‘1005’, ‘蠻王’),
(‘1006’, ‘狐貍’);

– 課程表數據
INSERT INTO edu_courses (course_no, course_name)
VALUES
(‘C001’, ‘大學語文’),
(‘C002’, ‘新視野英語’),
(‘C003’, ‘離散數學’),
(
‘C004’,
‘概率論與數理統計’
),
(‘C005’, ‘線性代數’),
(‘C006’, ‘高等數學’);

– 成績表數據
INSERT INTO edu_score (stu_id, course_no, scores)
VALUES
(‘1001’, ‘C001’, 67), (‘1002’, ‘C001’, 68), (‘1003’, ‘C001’, 69), (‘1004’, ‘C001’, 70), (‘1005’, ‘C001’, 71),
(‘1006’, ‘C001’, 72), (‘1001’, ‘C002’, 87), (‘1002’, ‘C002’, 88), (‘1003’, ‘C002’, 89), (‘1004’, ‘C002’, 90),
(‘1005’, ‘C002’, 91), (‘1006’, ‘C002’, 92), (‘1001’, ‘C003’, 83), (‘1002’, ‘C003’, 84), (‘1003’, ‘C003’, 85),
(‘1004’, ‘C003’, 86), (‘1005’, ‘C003’, 87), (‘1006’, ‘C003’, 88), (‘1001’, ‘C004’, 88), (‘1002’, ‘C004’, 89),
(‘1003’, ‘C004’, 90), (‘1004’, ‘C004’, 91), (‘1005’, ‘C004’, 92), (‘1006’, ‘C004’, 93), (‘1001’, ‘C005’, 77),
(‘1002’, ‘C005’, 78), (‘1003’, ‘C005’, 79);

總結

以上是生活随笔為你收集整理的mysql case when用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。