有些时候在实际开发中需要对查询的出来的某个字段进行转换,书上也有一些简单的列子。
假设我们有一张学生成绩表。(使用utf8mb4可以防止一些用户的特殊文字)
CREATE TABLE `t_stu_score` (
`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学生姓名',
`subject` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '课本名称',
`score` decimal(3, 0) NULL DEFAULT NULL COMMENT '分数',
`gender` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '性别',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
里面有一些数据
INSERT INTO `t_stu_score` VALUES (1, '汤x洲', '语文', 90, '1');
INSERT INTO `t_stu_score` VALUES (2, '肖x宝', '语文', 75, '0');
INSERT INTO `t_stu_score` VALUES (3, '王五', '语文', 86, '1');
INSERT INTO `t_stu_score` VALUES (4, '李四', '语文', 99, '0');
INSERT INTO `t_stu_score` VALUES (5, '刘同学', '语文', 59, '0');
题目一:对于gender字段为1的显示男,0显示女。case的简单函数
select case tss.gender when '1' then '男'
when '0' then '女'
-- else '其他'
end,
tss.username
FROM
t_stu_score AS tss
题目二: 根据规定对语文成绩 大于等于90分的同学显示为优,大于等于80小于90显示为良,60-79显示中,小于60显示为要继续努力。这种叫做case的搜索函数,和简单的case有很大的区别
SELECT
CASE
WHEN
tss.score >= 90 THEN '优'
WHEN
tss.score >= 80 and tss.score < 90 THEN '良'
WHEN
tss.score >= 60 and tss.score < 79 THEN '中'
WHEN
tss.score < 60 THEN '要继续努力'
-- else '其他'
END,
tss.username
FROM
t_stu_score AS tss
WHERE
tss.SUBJECT = '语文'
ps:其他可能
--case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。
--比如说,下面这段sql,你永远无法得到“第二类”这个结果
case when col_1 in ( 'a', 'b') then'第一类'
when col_1 in ('a') then '第二类'
else '其他' end
pgsql中limit无法直接简写 limit 10, 5
pgsql写法是 limit [分页条数] offset [从多少开始比如写0 就从 第1条开始]