1 聚合函数
1.1 GROUP_CONCAT()
🆔 简介:
group_concat() 函数首先根据 group by 指定的列进行分组,并且根据分隔符分隔,默认为 ‘,’,将同一个分组的值连接起来,返回一个字符串结果。
🍑 语法格式:
GROUP_CONCAT([DISTINCT] 字段名 [ORDER BY 排序字段 ASC/DESC] [SEPARATOR '分隔符']); 1 2 3
⭕️ 操作示例:
首先我们需要通过下面的代码创建一个表,而后录入一些数据(随意就行),示例代码及数据表示例如下:
CREATE TABLE emp ( eid VARCHAR (20) NOT NULL PRIMARY KEY, ename VARCHAR (20) NULL, age INT NULL, dept_id VARCHAR (20) NULL );
基于此表,简单举例,一段代码对应一个运行结果,供大家理解此函数的作用。
示例 1️⃣ 将所有名字合并成一行,并以爱心分隔
SELECT GROUP_CONCAT(ename SEPARATOR '♥') FROM emp;
示例 2️⃣ 将所有名字合并成一行,要求根据部门号进行分组,并以年龄总和降序展示
SELECT SUM(age) age_sum, GROUP_CONCAT(ename) FROM emp GROUP BY dept_id ORDER BY age_sum DESC;
1.2 其他聚合函数
聚合函数 | 作用 |
count() | 统计指定列不为Null的记录行数 |
sum() | 计算指定列的数值和,如果指定列类型不是数值类型,则计算结果为0 |
max() | 计算指定列的最大值,如果指定列是字符串类型,则使用字符串排序运算 |
min() | 计算指定列的最小值,如果指定列是字符串类型,则使用字符串排序运算 |
avg() | 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0 |
2 数学函数
🍎 常用数学函数一览表:
函数名 | 说明 |
ABS( x ) | 返回 x 的绝对值 |
CEIL( x ) | 返回大于等于 x 的最小整数 |
FLOOR( x ) | 返回小于等于 x 的最大整数 |
GREATEST(num1,num2,num3…) | 返回列表中最大的数 |
LEAST(num1,num2,num3…) | 返回列表中最小的数 |
MAX(expression) | 返回字段 expression 中的最大值 |
MIN(expression) | 返回字段 expression 中的最小值 |
MOD(x,y) | 返回 x 除以 y 后的余数 |
PI() | 返回圆周率 3.141593 |
POW(x,y) | 返回 x 的 y 次方 |
RAND() | 返回 0 - 1 的随机数 |
ROUND( x ) | 返回距离 x 最近的整数,遵循四舍五入 |
ROUND(x,y) | 返回距离 x 最近的包含 y 位小数的小数,同样遵循四舍五入 |
TRUNCATE(x,y) | 返回距离 x 最近的包含 y 位小数的小数,但是不会四舍五入 |
🖊 示例代码:
Tips: 答案在代码注释里哦~~~
SELECT ABS(-10); -- 10 SELECT CEIL(8.8); -- 9 SELECT CEIL(-8.8); -- -8 SELECT FLOOR(8.8); -- 8 SELECT FLOOR(-8.8); -- -9 SELECT GREATEST(-1,1,2,3,4,5,6); -- 6 SELECT LEAST(-1,1,2,3,4,5,6); -- -1 SELECT MOD(2.5, 2); -- 0.5 SELECT MOD(2.5, -2); -- 0.5 SELECT MOD(-2.5, 2); -- -0.5 SELECT MOD(-2.5, -2); -- -0.5 SELECT ROUND(5.532); -- 6 SELECT ROUND(5.532, 1); -- 5.5 SELECT TRUNCATE(6.67, 1); -- 6.6
3 字符串函数
🐱 常用字符串函数一览表:
函数 | 说明 |
LENGTH( s ) | 按照字节计算 s 的长度,具体由编码格式决定 |
CHAR_LENGTH( s ) | 返回字符串 s 的字符数 |
CHARCTER_LENGTH( s ) | 返回字符串 s 的字符数 |
CONCAT(s1,s2 … sn) | 将字符串 s1 s2 等多个字符串合并成一个字符串 |
CONCAT_WS(D,s1,s2 … sn) | 合并多个字符串,并以 D 为分隔符 |
FIELD(s,s1,s2…) | 返回第一个字符串在字符串列表(s1,s2…)中的位置 |
LTRIM( s ) | 去除字符串左边的空格 |
RTRIM( s ) | 去除字符串右边的空格 |
TRIM( s ) | 去除字符串两边的空格 |
MID(s,n,len) | 从字符串的 s 的 n 位置截取长度为 len 的字符串 |
POSITION( s1 IN s) | 返回 s1 在 字符串 s 中第一次出现的位置 |
REPLACE(s,s1,s2) | 将字符串 s2 替代 s 中的所有字符串 s1 |
REVERSE( s ) | 反转字符串 s |
RIGHT(s,n) | 返回字符串后 n 个字符 |
STARCMP(s1,s2) | 比较字符串 s1 s2,如果相等返回0,s1>s2返回1,s1<s2返回-1 |
示例代码:
Tips: 答案在代码注释里哦~~~
-- 1.按照字节求长度,注意 utf-8 英文 1 字节 汉字 3 字节 SELECT LENGTH('hello'); -- 5 SELECT LENGTH('祢豆子'); -- 9 -- 2.求字符串长度 SELECT CHAR_LENGTH('祢豆子'); -- 3 -- 3.合并字符串 SELECT CONCAT('我','是','祢豆子'); -- 我是祢豆子 SELECT CONCAT_WS('!','我','是','祢豆子'); -- 我!是!祢豆子 -- 4.返回字符串在列表的第一个位置,没有则返回0 SELECT FIELD('Nezuko','大头','小牛马','Nezuko','几何心凉','Nezuko'); -- 3 SELECT FIELD('小鹏','大头','小牛马'); -- 0 -- 5.去除空格 SELECT LTRIM(' Nezuko'); -- Nezuko SELECT RTRIM('Nezuko '); -- Nezuko SELECT TRIM(' Nezuko '); -- Nezuko -- 6.字符串截取 SELECT MID('我是祢豆子',3,3); -- 祢豆子 -- 7.获取位置 SELECT POSITION('627' IN 'Nezuko627'); -- 7 -- 8.替换字符 SELECT REPLACE('是你的大头大头','大头','小牛马'); -- 是你的小牛马小牛马 -- 9.反转字符串 SELECT REVERSE('我喜欢你'); -- 你欢喜我 -- 10.返回字符串后几个字符 SELECT RIGHT('Nezuko627',3); -- 627 -- 11.字符串比较 SELECT STRCMP('abc','abc'); -- 0 SELECT STRCMP('azc','abc'); -- 1 SELECT STRCMP('abcd','abcdzzzzzz'); -- -1
4 日期函数
日期函数相关内容大家了解下即可,需要使用的时候回过头来再查找。
4.1 常见日期函数与使用
🐘 常用日期函数一览表:
函数名称 | 说明 |
UNIX_TIMESTAMP() | 返回从1970-01-01 00:00:00 到当前的毫秒值 |
UNIX_TIMESTAMP(DATE_STRING) | 将指定日期转化成为时间戳 |
FROM_UNIXTIME(BIGINT UNIXTIME,STRINGFORMAT) | 将毫秒值时间戳转为指定格式日期 |
CURDATE() | 返回当前日期 |
CURRENT_DATE() | 返回当前日期 |
DATEDIFF(X, Y) | 获取日期差值,返回 Y 距离 X 有多少天 |
TIMEDIFF(X,Y) | 获取时间差值,返回 Y 距离 X 有多少秒 |
DATE_FORMAT(DATE,STRINGFORMAT) | 日期格式化 |
DATE_SUB(DATE,INTERVAL X DAY/MOUTH…) | 日期减法 |
DATE_ADD(DATE,INTERVAL X DAY/MONTH…) | 日期加法 |
EXTRACT(MONTH/DAY/YEAR/HOUR FROM DATE) | 从日期中获取月、日等 |