SQL函数

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(arg1arg2arg3, ...)

说明:第一个参数指定分隔符,分隔符不能为空,如果为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标签判断字符串相等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值