• SQL的简单函数(极客时间)


    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......
    

  • 相关阅读:
    webrtc系列之-像老鼠一样打洞
    Ubuntu记录用户IP访问操作信息工具
    OPENVIDU实现同一用户同时发布多个流媒体
    如何使用Nginx-rtmp搭建简易的HLS直播系统
    python实现数据库主从状态监控
    简单分析实现运维利器---批量操作bashshell
    《我与Windows Server 2008R2那点事儿》之域控账户故障事件
    常用动态路由协议之IS-IS
    在云服务器上搭建Python开发环境
    基于Python3接口自动化测试开发相关常用方法
  • 原文地址:https://www.cnblogs.com/wadmwz/p/11145181.html
Copyright © 2020-2023  润新知