概念:
MySQL中没了提高代码的重用性和隐藏实现细节,MySQL提供了很多函数。函数可以理解为别人封装号的模板代码
分类:
- 聚合函数
- 数学函数
- 字符串函数
- 日期函数
- 控制流函数
- 窗口函数
聚合函数
概念:
在MySQL中,聚合函数主要由:count,sum,min,max,avg,这些聚合函数在之前都讲过,不在过多重复。这里主要学习group_concat()。
group_concat()函数首先根据group by指定的列进行分组,并且用分隔符分隔,将同一个分组中的值连接起来,返回一个字符串结果
方法:
group concat ([distinct ] 字段名[order by 排序字段 asc/desc ] [ separator '分隔符 '])
注:
- 使用distinct可以排除重复值
- 如果需要对结果中的值进行排序,可以使用order by子句
- separator 是一个字符串值,默认为逗号
例如:
CREATE TABLE emp(
emp_id INT PRIMARY KEY auto_increment comment '编号',
emp_name CHAR(20) NOT NULL DEFAULT '' COMMENT '姓名',
salary DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '工资',
department CHAR(20) NOT NULL DEFAULT '' COMMENT '部门'
);
INSERT INTO emp(emp_name,salary,department) VALUES('张晶晶',5000,'财务部'),
('王飞飞', 5800.00, '财务部'),( '赵刚', 6200.00, '财务部'),
( '刘小贝', 5700.00, '人事部'),( '王大鹏', 6700.00, '人事部'),
( '张小斐', 5200.00, '人事部'),( '刘云云', 7500.00, '销售部'),
( '刘云鹏', 7200.00, '销售部'),( '刘云鹏', 7800.00, '销售部');
-- 将所有员工的名字合并成一行
SELECT GROUP_CONCAT(emp_name) FROM emp;
-- 指定分隔符合并
SELECT GROUP_CONCAT(emp_name SEPARATOR ';') FROM emp;
-- 指定排序方式和分隔符
SELECT department,GROUP_CONCAT(emp_name SEPARATOR ';')FROM emp GROUP BY department;
SELECT department,GROUP_CONCAT(emp_name ORDER BY salary DESC SEPARATOR ';')FROM emp GROUP BY department;
数学函数
函数名 | 描述 | 实例 |
---|---|---|
ABS(x) | 返回x的绝对值 | 返回-1的绝对值;SELECT ABS(-1)——返回1 |
CEIL(x) | 返回大于或等于x的最小整数 | SELECT CEIL(1.5) ——返回2 |
FLOOR(x) | 返回小于或等于x的最大整数 | 小于或等于1.5的整数:SELECT FLOOR(1.5) ——返回1 |
GREATEST(expr1,expr2,expr3,……) | 返回列表中的最大值 | 返回以下数字列表中的最大值:SELECT GREATEST(3,12,34,8,25);——34 返回以下字符串列表中的最大值:SELECT GREATEST(“Google”,“Runoob”,“Apple”) ;——Runoob |
LEAST(expr1,expr2,expr3……) | 返回列表中的最小值 | 返回以下数字列表中的最小值:SELECT LEAST(3,12,34,8,25);——3 返回以下字符串列表中的最小值:SELECT LEAST(“Google”,“Runoob”,“Apple”);——Apple |
MAX(expression) | 返回字段expression中的最大值 | 返回数据表products中字段price的最大值:ELECT MAX(Price) AS MinPrice FROM Products; |
MIN(expression) | 返回字段expression中的最小值 | 返回数据表Products中字段Price的最小值:SELECT MIN(Price) AS MinPrice FROM Products; |
MOD(x,y) | 返回x除以y以后的余数 | 5除于2的余数: SELECT MOD(5,2) ——1 |
PI()) | 返回圆周率(3.141593) | SELECT PI() ——3.141593 |
POW(x,y) | 返回x的y次方 | 2的3次方: SELECT POW(2,3) —— 8 |
RAND() | 返回0到1的随机数 | SELECT RAND() ——0.93099315644334 |
ROUND(x) | 返回离x最近的整数(遵循四舍五入) | SELECT ROUND(1.23456) ——1 |
ROUND(X,Y) | 返回指定位数的小数(遵循四舍五入) | SELECT ROUND(1.23456,3) ——1.235 |
TRUNCATE(x,y) | 返回数值x保留小数点后y位的值(与ROUND最大的区别是不会进行四舍五入) | SELECT TRUNCATE(1.23456,3) ——1.234 |
例如:
SELECT abs(-10);
SELECT abs(10);
-- 向上取整
SELECT CEIL(1.1);
SELECT CEIL(1.0);
-- 向下取整
SELECT FLOOR(1.1);
SELECT FLOOR(1.9);
-- 取列表最大值
SELECT GREATEST(1,2,3);
-- 取列表最小值
SELECT LEAST(1,2,3);
-- 取模
SELECT MOD(5,2);
-- 取x的y次方
SELECT POWER(2,3);
-- 取随机数3
SELECT RAND();
SELECT FLOOR(RAND()*100);
-- 将小数的四舍五入取整
SELECT ROUND(3.1415);
SELECT ROUND(3.5415);
-- 将小数的四舍五入取指定位数小数
SELECT ROUND(3.5415