MySQL之——常用函数汇总

目录

1、MySQL字符串拼接函数

2、MySQL字符串截取函数

3、MySQL字符串长度函数char_length()、length()

4、MySQL大小写转换函数

 5、MySQL之case when than else end 函数

6、MySQL之IF函数

7、MySQL排序函数RANK

8、MySQL聚合函数


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;

长相思,长相思。若问相思甚了期,除非相见时。长相思,长相思。欲把相思说似谁,浅情人不知。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值