1、将一条记录中的多个表字段的值拼接并输出一个结果字段
CREATE TABLE `demo_table` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`trade_name` varchar(32) DEFAULT NULL COMMENT '商品名称',
`type_a` int(2) DEFAULT NULL COMMENT '类型1-小类a',
`type_b` int(2) DEFAULT NULL COMMENT '类型1-小类b',
`type_c` int(2) DEFAULT NULL COMMENT '类型1-小类c',
`kind_a` int(2) DEFAULT NULL COMMENT '类型2-小类a',
`kind_b` int(2) DEFAULT NULL COMMENT '类型2-小类b',
`kind_c` int(2) DEFAULT NULL COMMENT '类型2-小类c',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='demo';
假设存在形如上述结构的表,现在需要将商品数据,按照`type_a`,`type_b`,`type_c`字段拼接输出为结果列A,按照`kind_a`,`kind_b`,`kind_c`字段拼接输出为结果列B。
采用方法:CONCAT_WS()函数
功能:一次性指定分隔符
语法:CONCAT_WS(separator,str1,str2,...)
说明:第一个参数指定分隔符,分隔符不能为空,如果为NULL,则返回值直接为NULL
示例:
SELECT trade_name AS tradeName,
CONCAT_WS(',',type_a,type_b,type_c) AS resultA,
CONCAT_WS(',',kind_a,kind_b,kind_c) AS resultB
FROM demo_table
传送门:类似功能函数介绍
2、SUM 和 COUNT 函数 与 IF函数 的组合运用
#统计学生成绩大于90分的学生,姓名去重后的数量
COUNT(DISTINCT student_name ,IF(student_point > 90,TRUE,NULL))
#统计所有女同学的成绩总分
SUM(IF(student_sex = 'female',student_point,0))
3、将一条记录中的多个字段的值进行比较,得出最大值
CREATE TABLE `demo_table` (
`id` int(12) NOT NULL AUTO_INCREMENT,
`trade_name` varchar(32) DEFAULT NULL COMMENT '商品名称',
`type_a` int(2) DEFAULT NULL COMMENT '类型1-小类a',
`type_b` int(2) DEFAULT NULL COMMENT '类型1-小类b',
`type_c` int(2) DEFAULT NULL COMMENT '类型1-小类c',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='demo';
假设存在形如上述结构的表,现在需要将商品数据,按照`type_a`,`type_b`,`type_c`字段进行最大值比较,输出很件商品对应的其中最大值的结果列A。
采用方法:GREATEST() 函数
功能:返回参数列表的最大值
语法:GREATEST(arg1, arg2, arg3, ...)
说明:第一个参数指定分隔符,分隔符不能为空,如果为NULL,则返回值直接为NULL
示例:
-- 查询最大值
SELECT
id,
trade_name,
GREATEST( type_a, type_b, type_c ) AS maxData
FROM
demo_table
-- 查询最大值并根据最值匹配的字段输出状态位
SELECT
id,
trade_name,
maxData,
CASE
maxData
WHEN type_a THEN
1
WHEN type_b THEN
2
WHEN type_c THEN
3 ELSE NULL
END AS tradeStatus
FROM
( SELECT id, trade_name, GREATEST( type_a, type_b, type_c ) AS maxData FROM demo_table ) AS A
4、mybatis中使用if标签 判断两个值是否相等(针对单个字母的值进行匹配)
在判断变量的值是否相等时,通常都会使用'=='符号,但这其中有个易错点:如果判断的值是单引号+单个字母时,采用'=='是会报错的。
【修正前】
因为mybatis映射文件使用ognl表达式,而OGNL在解析参数时跟java强类型语言冲突导致报错。
可以采用单个等号匹配
【修正1】
或者在仍然使用两个等号的情况下,将'Y'转换成字符串类型
【修正2】
参考阅读:== 和 = 的使用
参考阅读:if test字符串比较
参考阅读:mybatis if标签判断字符串相等