目录
3、MySQL字符串长度函数char_length()、length()
5、MySQL之case when than else end 函数
1、MySQL字符串拼接函数
- CONCAT
语法
concat(str1,str2,...)
例子说明:
SELECT CONCAT('You ', 'are ', 'a ', 'good ', 'man') AS 'result' FROM DUAL;
- CONCAT_WS
语法
CONCAT_WS(separator,str1,str2,...)
语法说明
CONCAT_WS(分隔符,字符1,字符2,...)
例子说明
SELECT CONCAT_WS(' ','but','we',"haven't",'fate') AS 'result' FROM DUAL;
- GROUP_CONCAT
说明
对分组后的数据,指定某个字段进行拼接,并且可以指定拼接的分隔符和拼接的顺序
语法
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
语法说明:
GROUP_CONCAT([DISTINCT] 字符1,字符2... [ORDER BY 需要排序的字段 [ASC | DESC] ] [SEPARATOR 分隔符])
例子说明:
咱们以 力扣 的一题来做例子 1484题
题目要求按日期分组销售产品,将活动表中的产品列product 最后在新查出来的结果集中按字典序排序,并用逗号 ',' 分隔显示到新列products中
输入: Activities
表: +------------+-------------+ | sell_date | product | +------------+-------------+ | 2020-05-30 | Headphone | | 2020-06-01 | Pencil | | 2020-06-02 | Mask | | 2020-05-30 | Basketball | | 2020-06-01 | Bible | | 2020-06-02 | Mask | | 2020-05-30 | T-Shirt | +------------+-------------+ 输出: +------------+----------+------------------------------+ | sell_date | num_sold | products | +------------+----------+------------------------------+ | 2020-05-30 | 3 | Basketball,Headphone,T-shirt | | 2020-06-01 | 2 | Bible,Pencil | | 2020-06-02 | 1 | Mask | +------------+----------+------------------------------+
select sell_date, count(distinct product) num_sold, GROUP_CONCAT(distinct product ORDER BY product SEPARATOR ',') products from Activities group by sell_date;
# 解析:
# 本题需要对日期进行分组,而分组之后恰好需要group_concat函数来进行字符串的拼接
# 中间的 ORDER BY product 是按要求对产品进行字典序排序
2、MySQL字符串截取函数
left()、right()、substring()、substring_index()、mid()、substr() 等价于 substring() 函数;其中substring() 的功能非常强大和灵活。
1、left(str, length):从字符串的左边取 length 长度的字符串
2、right(str, length):从字符串的右边取 length 长度的字符串
select left('mp.csdn.net', 3);
# 从左边开始截取三个字符,结果:mp.
select right('mp.csdn.net', 3);
# 从左边开始截取三个字符,结果:net
3、substring(str, pos)、substring(str, pos, len)
select substring('mp.csdn.net', 4);
# 从索引4开始一直截取到最后,结果:csdn.net
select substring('mp.csdn.net', 4, 4);
# 从索引4开始,截取4个字符,结果:csdn
select substring('mp.csdn.net', -4);
# 从索引-4(从右向左计算)开始一直截取到最后,结果:.net
select substring('mp.csdn.net', -3, 4);
# 从索引-3开始一直截取到最后,结果:net
#可以看到我写的是4,最后是net,因为整个长度只有3个字符了
3、MySQL字符串长度函数char_length()、length()
# char_length 和 length 都是一个样子的
select char_length('奥黛丽赫本');
select length('奥黛丽赫本');
4、MySQL大小写转换函数
大写函数UPPER(s)、UCASE(s)
select upper('Peter');
select ucase('George');
小写函数LOWER(s)和LCASE(s)
select lower('CSDN');
select lcase('BAIDU.COM');
5、MySQL之case when than else end 函数
Case具有两种格式。简单Case函数和Case搜索函数。
# 简单Case函数,枚举清晰
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '保密' END
# Case搜索函数;判别式条件,有点类似Java的if....else....的感觉
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '保密' END#case 后跟一个字段,when当某某条件时...than执行某某...else否则就怎样,一定不能少了结束条件end
6、MySQL之IF函数
IF函数根据判别式是否成立进行选择执行,成立执行前面的语句,不成立执行后面的语句;
IF(conditional, value_if_true, value_if_false);
7、MySQL排序函数RANK
窗口函数用法:
<窗口函数> OVER ( [PARTITION BY <列清单> ] ORDER BY <排序用列清单> )
在计算排序时,若存在相同位次,会跳过之后的位次。
例如,有3条排在第2位时,排序为:1,2,2,2,4······
2、DENSE_RANK()
这就是题目中所用到的函数,在计算排序时,若存在相同位次,不会跳过之后的位次。
例如,有3条排在第1位时,排序为:1,1,1,2······
3、ROW_NUMBER()
这个函数赋予唯一的连续位次。
例如,有3条排在第1位时,排序为:1,2,3,4······
相信自己😘
8、MySQL聚合函数
注意:聚合函数不能嵌套调用。比如不能出现类似***AVG(SUM(字段名称))***形式的调用。
# 见名思意 求平均值
AVG()
# 求和
SUM()# 求最大值
MAX()求最小值
MIN()# 统计一组数据的个数
COUNT()# 聚合函数一般搭配分组函数group by使用,可以解决很多问题,本人是屡试不爽 😄
# 如果对聚合后的数据还要进行条件筛(shai)选,就需要用到having
例如:题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 第1050题
至少合作过三次的导演,对演员和导演进行分组查询之后,要有一个条件就是需要他们至少合作过三次以上,所以加上 having count(0) >2 【这地方有我自己老是忘记的点为什么 count(0)>2;其实写成count(0)>=3更容易理解一些,count(0)>2,在2的上面那个数不就是3么🤣】
select actor_id, director_id from ActorDirector group by actor_id, director_id having count(0) >2;
长相思,长相思。若问相思甚了期,除非相见时。长相思,长相思。欲把相思说似谁,浅情人不知。