SQL的函数

函数就是将我们经常使用的代码封装起来, 需要的时候直接调用, 提高代码效率和可维护性.

SQL函数一般是在数据上执行, 可以方便地转换和处理数据.

常用的SQL函数

SQL提供了一些常用的内置函数, 也可以自定义, 内置的函数分为四类:

  • 算数函数
  • 字符串函数
  • 日期函数
  • 转换函数

算数函数

算数函数, 其实就是对数据类型的字段进行算术运算, 常用的如下:

SELECT ABS(-2);  // 2
SELECT MOD(101, 3); // 2
SELECT ROUND(37.25, 1); // 37.3

字符串函数

常用的字符串函数如下:

SELECT CONCAT('abc', 123); // abc123
SELECT LENGTH('你好'); // 6
SELECT CHAR_LENGTH('你好'); // 2
SELECT LOWER('ABC'); // abc
SELECT UPPER('abc'); // ABC
SELECT REPLACE('fabcd', 'abc', 123); // f123d
SELECT SUBSTRING('fabcd', 1,3); // fab

日期函数

常用函数如下:

SELECT CURRENT_DATE;  // 获取当前日期
SELECT CURRENT_TIME; // 获取当前时间
SELECT CURRENT_TIMESTAMP; // 获取当前日期 + 时间(时间戳)
SELECT EXTRACT(YEAR FROM '2019-07-07'); // 获取日期年
SELECT EXTRACT(MONTH FROM '2019-07-07'); // 获取日期月
SELECT EXTRACT(DAY FROM '2019-07-07'); // 获取日期天
SELECT DATE('2019-07-07 09:54:00'); // 获取日期
SELECT TIME('2019-07-07 09:54:00'); // 获取时间
SELECT TIMESTAMP('2019-07-07 09:54:00'); // 获取时间戳

以后日期类型的比较实用DATE()函数来进行. 这点很重要.

转换函数

转换函数的作用是用来转换数据类型的

SELECT CAST(123.123 AS INT);  // 报错, 原数值有小数, 不会四舍五入, 转换出错
SELECT CAST(123.123 AS DECIMAL(8,2)); // 8表示整数+小数总共8位,2表示小数位数有两位
SELECT COALESCE(NULL, 1, 2); // 第一个部位null的数是1

聚集函数

聚集函数是对一组数据进行汇总的函数, 输入一组数据, 输出的是单个值. SQL中的聚集函数一共包括5个

SELECT COUNT(*) FROM heros WHERE hp_max > 6000; // 查询最大生命值大于6000的英雄数量
SELECT MAX(hp_max) FROM heros WHERE role_main = '射手' or role_assist = '射手'; // 查询主要定位和次要定位都是射手的英雄的最大生命值
SELECT COUNT(*), AVG(hp_max), MAX(mp_max), MIN(attack_max), SUM(defense_max) FROM heros WHERE role_main = '射手' or role_assist = '射手'; // 一次使用多个聚合函数
SELECT ROUND(AVG(DISTINCT hp_max), 2) FROM heros; // 计算最大生命的平均值,并保留小数点后两位

注意MAX, MIN, AVG函数会自动忽略值为NULL的数据行.

数据的分组和统计

对数据进行分组需要使用到GROUP BY子句:

SELECT COUNT(*), role_main FROM heros GROUP BY role_main; // 按照英雄的主要定位分组, 并统计每组的英雄数量
SELECT COUNT(*) as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist ORDER BY num DESC; // 多个字段进行分组, 并按照数量进行降序排序

HAVING过滤分组

使用WHERE 条件可以进行数据的过滤, 但是在分组的时候, 过滤并不能使用WHERE, 而是需要使用HAVING, 简单的说WHERE用于数据行, HAVING用于分组.

SELECT COUNT(*) as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist HAVING num > 5 ORDER BY num DESC; // 按照主要定位和次要定位进行分组, 查询数量大于5的分组并降序排序
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; // WHERE和HAVING同时使用, WHERE先排除数据行, 之后分组过滤

SELECT的查询语句中, 关键字的顺序是不能颠倒的:

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

SQL的简单函数(极客时间)的更多相关文章

  1. 极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间

    极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间极客时间 Mysql实战45讲 07讲行锁功过:怎么减少行锁对性能的影响笔记 极客时间 笔记体会: 方案一,事务相 ...

  2. Mysql实战45讲 05讲深入浅出索引(下)极客时间 读书笔记

    极客时间 Mysql实战45讲 04讲深入浅出索引(下)极客时间 笔记体会: 回表:回到主键索引树搜索的过程,称为回表覆盖索引:某索引已经覆盖了查询需求,称为覆盖索引,例如:select ID fro ...

  3. Mysql实战45讲 04讲深入浅出索引(上)读书笔记 极客时间

    极客时间 Mysql实战45讲 04讲深入浅出索引 极客时间(上)读书笔记  笔记体悟 1.索引的作用:提高数据查询效率2.常见索引模型:哈希表.有序数组.搜索树3.哈希表:键 - 值(key - v ...

  4. java爬虫系列第四讲-采集"极客时间"专栏文章、视频专辑

    1.概述 极客时间(https://time.geekbang.org/),想必大家都知道的,上面有很多值得大家学习的课程,如下图: 本文主要内容 使用webmagic采集极客时间中某个专栏课程生成h ...

  5. 【视频合集】极客时间 react实战进阶45讲 【更新中】

    https://up2.v.sharedaka.com/video/ochvq0AVfpa71A24bmugS5EewhFM1553702519936.mp4 01 React出现的历史背景及特性介绍 ...

  6. "做中学"之“极客时间”课程学习指导

    目录 "做中学"之"极客时间"课程学习指导 所有课程都可以选的课程 Java程序设计 移动平台开发 网络攻防实践 信息安全系统设计基础 信息安全专业导论 极客时 ...

  7. 如何将极客时间课程制作成kindle电子书

    订阅了几个极客时间的专栏,一直没有时间去看. 最近,想着如果把内容制作成电子书,利用上下班时间学习一下,岂不是很方便? 在网上搜到一个很好用的开源软件,几分钟就可以把极客时间的专栏做成电子书,简直太棒 ...

  8. 极客时间_Vue开发实战_汇总贴

    视频地址: https://time.geekbang.org/course/intro/163 https://github.com/tangjinzhou/geektime-vue-1 电脑dem ...

  9. 左耳朵耗子:我为什么要在极客时间 App 开设独家专栏?

    参考链接:https://www.infoq.cn/article/2018/01/why-geektime 不少朋友都知道我在极客时间App 上开了一个收费专栏<左耳听风>,这个专栏会开 ...

随机推荐

  1. git commit 新修改的内容 添加到上次提交中 减少提交的日志

    有时候提交过一次记录只有,又修改了一次,仅仅是改动一些较少的内容,可以使用git commit --amend. 添加到上次提交过程中: --amend amend previous commit g ...

  2. Shell命令-用户用户组管理之userdel、groupadd

    文件及内容处理 - userdel.groupadd 1. userdel:删除用户 userdel命令的功能说明 userdel 命令用于删除用户帐号.userdel 可删除用户帐号与相关的文件.若 ...

  3. Go命令行库Cobra的核心文件root.go

    因为docker及Kubernetes都在用cobra库,所以记录一下. 自定义的地方,高红标出. root.go /* Copyright © 2019 NAME HERE <EMAIL AD ...

  4. python线程类的start()和run()

    start()方法: 开始线程活动. 对每一个线程对象来说它只能被调用一次,它安排对象在一个另外的单独线程中调用run()方法,而非当前所处的线程,当该方法在同一个线程对象中被调用超过一次时,会引入R ...

  5. 线程休眠sleep

    一.sleep的作用 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”.sleep()会指定休眠时间,线程休 ...

  6. luoguP4069 [SDOI2016]游戏

    题意 显然书剖套李超树. 考虑怎么算函数值: 设\((x,y)\)的\(lca\)为\(z\),我们插一条斜率为\(k\),截距为\(b\)的线段. \((x,z)\)上的点\(u\): \(f(u) ...

  7. Paper | BLIND QUALITY ASSESSMENT OF COMPRESSED IMAGES VIA PSEUDO STRUCTURAL SIMILARITY

    目录 1. 技术细节 1.1 得到MDI 1.2 判别伪结构,计算伪结构相似性 2. 实验 动机:作者认为,基于块的压缩会产生一种伪结构(pseudo structures),并且不同程度压缩产生的伪 ...

  8. 小白专场-堆中的路径-c语言实现

    目录 一.题意理解 二.堆的表示及其操作 三.主程序 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:https://www.cnblogs.com/ ...

  9. github README.md创建不了

    在项目主页上,点击‘Add a README’按钮,如下图: 进入编辑界面,编辑好内容后,提交按钮的状态为灰化不可点击,如下图: 不知道为什么会出现这种情况,但是我无意中点击了Ctrl+Enter竟然 ...

  10. linux jdk1.8 64位下载永久地址,ubuntu,centos,java

    https://pan.baidu.com/s/1A4cl3vUWCtiHxJ9eHK2ApQ  密码:j8dg