Mysql4函数


在这里插入图片描述

前言

函数的作用:把经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。Mysql中内置函数如下:

  • 算术函数,顾名思义就是对数值类型的字段进行算术运算。
  • 常用的字符串函数操作包括了字符串拼接,大小写转换,求长度以及字符串替换和截取等。
  • 日期函数是对数据表中的日期进行处理。
  • 转换函数可以转换数据之间的类型。
  • 聚集函数:它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。

命名规范:

  • 关键字和函数名称全部大写;
  • 数据库名、表名、字段名称全部小写;
  • SQL 语句必须以分号结尾

基本函数

算数函数
在这里插入图片描述

字符串函数

在这里插入图片描述

日期函数

在这里插入图片描述

转换函数

在这里插入图片描述

聚集函数

基本聚集函数

例子一,查询最大生命值大于 6000 的英雄数量。:COUNT(*)

mysql> SELECT COUNT(*) FROM heros WHERE hp_max > 6000;
+----------+
| COUNT(*) |
+----------+
|       41 |
+----------+
1 row in set (0.00 sec)

例子二,询最大生命值大于 6000,且有次要定位的英雄数量。

mysql> SELECT COUNT(role_assist) FROM heros WHERE hp_max > 6000;
+--------------------+
| COUNT(role_assist) |
+--------------------+
|                 23 |
+--------------------+
1 row in set (0.00 sec)

注意:COUNT(role_assist)会忽略值为 NULL 的数据行,而 COUNT(*) 只是统计数据行数,不管某个字段是否为 NULL。

例子三:

mysql> SELECT COUNT(*), AVG(hp_max), MAX(mp_max), MIN(attack_max), SUM(defense_max) FROM heros WHERE role_main = '射手' or role_assist = '射手';
+----------+-------------+-------------+-----------------+------------------+
| COUNT(*) | AVG(hp_max) | MAX(mp_max) | MIN(attack_max) | SUM(defense_max) |
+----------+-------------+-------------+-----------------+------------------+
|       10 |      5798.5 |        1784 |             362 |             3333 |
+----------+-------------+-------------+-----------------+------------------+
1 row in set (0.00 sec)

注意:AVG、MAX、MIN 等聚集函数会自动忽略值为 NULL 的数据行;

对数据分组统计

例子一:按照英雄的主要定位进行分组,并统计每组的英雄数量。

mysql> SELECT COUNT(*), role_main FROM heros GROUP BY role_main;
+----------+-----------+
| COUNT(*) | role_main |
+----------+-----------+
|       10 | 坦克      |
|       18 | 战士      |
|       19 | 法师      |
|        6 | 辅助      |
|       10 | 射手      |
|        6 | 刺客      |
+----------+-----------+
6 rows in set (0.00 sec)

例子二:按照英雄的主要定位进行分组,并统计每组的英雄数量。

mysql> SELECT COUNT(*), role_assist FROM heros GROUP BY role_assist;
+----------+-------------+
| COUNT(*) | role_assist |
+----------+-------------+
|        6 | 战士        |
|       10 | 坦克        |
|        5 | 辅助        |
|       40 | NULL        |
|        2 | 法师        |
|        6 | 刺客        |
+----------+-------------+
6 rows in set (0.00 sec)

例子三:使用多个字段进行分组,并按照数量从高到第排列。

mysql> SELECT COUNT(*) as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist ORDER BY num DESC;
+-----+-----------+-------------+
| num | role_main | role_assist |
+-----+-----------+-------------+
|  12 | 法师      | NULL        |
|   9 | 射手      | NULL        |
|   8 | 战士      | NULL        |
|   6 | 战士      | 坦克        |
|   5 | 坦克      | NULL        |
|   3 | 坦克      | 辅助        |
|   3 | 刺客      | NULL        |
|   3 | 刺客      | 战士        |
|   3 | 战士      | 刺客        |
|   3 | 辅助      | NULL        |
|   2 | 法师      | 辅助        |
|   2 | 法师      | 刺客        |
|   2 | 坦克      | 战士        |
|   2 | 辅助      | 坦克        |
|   2 | 法师      | 坦克        |
|   1 | 辅助      | 法师        |
|   1 | 法师      | 战士        |
|   1 | 战士      | 法师        |
|   1 | 射手      | 刺客        |
+-----+-----------+-------------+
19 rows in set (0.00 sec)

HAVING与WHERE的区别?

SELECT查询中,关键字顺序:

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...

WHEREHAVING区别主要是:WHERE是用于过滤数据行,而HAVING则作用于分组。

例子一:

mysql> SELECT COUNT(*) as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist HAVING num > 5 ORDER BY num DESC;
+-----+-----------+-------------+
| num | role_main | role_assist |
+-----+-----------+-------------+
|  12 | 法师      | NULL        |
|   9 | 射手      | NULL        |
|   8 | 战士      | NULL        |
|   6 | 战士      | 坦克        |
+-----+-----------+-------------+
4 rows in set (0.00 sec)

注意:以上代码,通过role_mainrole_assit进行分组,同时,通过HAVING,过滤掉<=5的分组。

例子二:

mysql> SELECT COUNT(*) as num, role_main, role_assist FROM heros WHERE hp_max > 6000 GROUP BY role_main, role_assist HAVING num > 5 ORDER BY num DESC;
+-----+-----------+-------------+
| num | role_main | role_assist |
+-----+-----------+-------------+
|   8 | 战士      | NULL        |
|   6 | 战士      | 坦克        |
+-----+-----------+-------------+
2 rows in set (0.00 sec)

注意:以上代码,首先通过WHERE过滤掉数据行 hp_max<=6000,再通过HAVING过滤掉num <=5的分组。

参考

  1. SQL必知必会从入门到数据实战
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值