MYSQL内置函数

一、ABS(X)

        返回的绝对值x,如果x为null则返回null。结果类型派生自参数类型。

SELECT ABS(2); -- 2
SELECT ABS(-32); -- 32
SELECT ABS(NULL); -- NULL

二、AVG([DISTINCT] expr)

        返回的平均值 expr。该 DISTINCT选项可用于返回 的不同值的平均值 expr。如果没有匹配的行,则AVG()返回 NULL。该函数还返回 NULL如果 expr is NULL

SELECT student_name, AVG(test_score)
FROM student
GROUP BY student_name;

三、COUNT(expr)

        返回语句检索的行中非NULL值的数量的计数。结果是一个值。 如果没有匹配的行,则COUNT()返回 0COUNT(NULL)返回 0。

SELECT student.student_name, COUNT(*)
FROM student,course
WHERE student.student_id = course.student_id
GROUP BY student_name;

        COUNT(*)有点不同,因为它返回检索到的行数,无论它们是否包含 NULL值。

        对于诸如之类的事务性存储引擎 InnoDB,存储准确的行数是有问题的。多个事务可能同时发生,每个事务都可能影响计数。InnoDB不保留表中行的内部计数,因为并发事务可能同时 “看到”不同数量的行。因此,SELECT COUNT(*) 语句只对当前事务可见的行进行计数。

        从 MySQL 8.0.13 开始,如果没有额外的子句(例如or ),表的查询性能针对单线程工作负载进行了优化。InnoDB通过遍历最小的可用二级索引来处理SELECT COUNT(*)语句,除非索引或优化器提示指示优化器使用不同的索引。如果二级索引不存在,则通过扫描聚簇索引来 InnoDB 处理语句。

   InnoDB以相同的方式处理SELECT COUNT(*)SELECT COUNT(1) 操作。没有性能差异。

        对于MyISAM表, 如果从一个表中检索,没有检索到其他列,并且没有子句,COUNT(*)则优化为非常快速地返回 。

四、COUNT(DISTINCT expr,[expr...])

        返回具有不同非NULL expr 值的行数的计数。如果没有匹配的行,则 COUNT(DISTINCT)返回 0

SELECT COUNT(DISTINCT results)
FROM student;

五、MAX([DISTINCT] expr)、MIN([DISTINCT] expr)

  • MAX() 返回的最大值 expr
  • MIN() 返回的最小值 expr

   DISTINCT关键字可用于查找不同值的最大值。

SELECT student_name, MIN(test_score), MAX(test_score)
FROM student
GROUP BY student_name;

六、SUM([DISTINCT] expr)

        返回的总和expr。如果返回集没有行,则SUM()返回NULLDISTINCT关键字可用于仅对不同值求和 expr。如果没有匹配的行,或者如果 exprNULL, 则SUM()返回 NULL

SELECT SUM(test_score)
FROM student;

七、NOW()

        返回当前日期和时间作为值。该值以会话时区表示"YYYY-MM-DD hh:mm:ss"。

        LOCALTIME()和LOCALTIMESTAMP()与NOW()的作用相同。

SELECT NOW();

八、CONCAT(str1,str2,...)

        返回由连接参数产生的字符串。可能有一个或多个参数。如果有一个参数是NULL则返回NULL。

SELECT CONCAT('My', 'S', 'QL'); -- 'MySQL'
SELECT CONCAT('My', NULL, 'QL'); -- NULL
SELECT CONCAT(14.3); -- '14.3'
-- 对于带引号的字符串,可以通过将字符串彼此相邻来执行连接:
SELECT 'My' 'S' 'QL'; -- 'MySQL'

九、IF(expr1,expr2,expr3)、IFNULL(expr1,expr2)、NULLIF(expr1,expr2)

  • IF(expr1,expr2,expr3)如果expr1结果为真,则返回expr2,反之返回expr3。
  • IFNULL(expr1,expr2)如果expr1不是null,则返回expr1,反之返回expr2。
  • NULLIF(expr1,expr2) 如果expr1 == expr2,则返回null,反之返回expr1。
select IF(1 = 1, "A", "B"); -- A
select IFNULL(null, "A"); -- A
select NULLIF("A", "A"); -- NULL

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游王子og

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值