news 2026/4/18 10:31:13

sql题库知识点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sql题库知识点

(执行顺序:FROM/JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY)

(一)时间函数:TIMESTAMPDIFF(时间差计算)

  • 计算用户实际观看秒数,为播放进度、完播率计算提供基础数值。

  • 示例
    -- 计算观看秒数(核心用法) TIMESTAMPDIFF(SECOND, start_time, end_time) -- 计算观看分钟数(取整,只算完整单位) TIMESTAMPDIFF(MINUTE, start_time, end_time)

(二)条件函数:IF(三元判断)

  • 语法IF(判断条件, 条件成立返回值, 条件不成立返回值)

  • 业务关联动态计算单条播放进度(观看超时长返回 1,否则返回时长比值),是进度统计的核心逻辑。

  • 示例
    -- 播放进度计算(核心用法) IF(TIMESTAMPDIFF(SECOND, s, e) > duration, 1, TIMESTAMPDIFF(SECOND, s, e)/duration) -- 完播率判断(满足完播返回1,否则0) IF(TIMESTAMPDIFF(SECOND, s, e) >= duration, 1, 0)

(三)数值函数:ROUND(四舍五入)

1.ROUND:数值格式化

  • 核心说明:对数值四舍五入,保留指定小数位数,让统计结果更整洁,满足业务展示要求。

  • 语法ROUND(待格式化数值, 保留小数位数)

  • 业务关联:播放进度保留 2 位小数、完播率保留 3 位小数,避免出现无限小数(如 2/3≈0.666666→0.667)。

  • 示例
    ROUND(0.666666, 3) → 0.667 -- 完播率保留3位 ROUND(0.833333*100, 2) → 83.33 -- 播放进度保留2位

(四)字符串函数:CONCAT(字符串拼接)

  • 核心说明:将多个字符串 / 数值拼接为一个字符串;数值会自动转为字符串后拼接。

  • 语法CONCAT(字符串1, 字符串2, ...)

  • 业务关联:将播放进度的数字(如 83.33)和%拼接为百分比格式(如 83.33%),符合业务展示习惯。

  • 示例
    CONCAT(83.33, "%") → "83.33%" CONCAT("视频", video_id, "完播率") → "视频2001完播率"

三、表关联:JOIN内连接(含USING简化写法)

1. 核心说明:JOIN(等价于INNER JOIN

  • 又称内连接,通过关联字段(如video_id)匹配两张表的数据,只保留两张表中都存在匹配记录的行

  • 核心:排除「无播放记录的视频」和「无视频信息的播放记录」,符合常规业务统计逻辑。

2. 两种关联写法

  • 标准写法ON显式指定关联条件,适用于两张表关联字段名不同的场景;

  • 简化写法USING适用于两张表关联字段名完全相同的场景(如两张表都是video_id),等价于ON 表1.字段 = 表2.字段,简化代码。

  • 语法
    -- 标准写法:ON 表1 JOIN 表2 ON 表1.关联字段 = 表2.关联字段 -- 简化写法:USING(字段名相同) 表1 JOIN 表2 USING(关联字段)
  • 业务关联:关联tb_user_video_log(播放日志)和tb_video_info(视频信息),获取「播放时间」和「视频时长 / 标签」,为后续计算提供完整数据。

  • 示例
    -- 你的代码中简化写法(推荐,字段名相同时) tb_user_video_log JOIN tb_video_info USING(video_id) -- 等价于标准写法(通用,所有场景) tb_user_video_log t1 JOIN tb_video_info t2 ON t1.video_id = t2.video_id

四、分组与筛选:GROUP BY+HAVING(核心区分WHERE

1.GROUP BY:分组查询

  • 核心说明:按指定字段(如tagvideo_id)将数据分组,后续的聚合函数(AVG/SUM/COUNT)会按每组独立计算,而非全表计算。

  • 关键规则SELECT中查询的字段,要么在GROUP BY中,要么被聚合函数包裹(否则会报错,MySQL 非严格模式可能不报错,但结果无意义)。

  • 业务关联:按tag分组算各标签的平均进度、按video_id分组算各视频的完播率,是「按维度统计」的基础。

  • 示例
    GROUP BY tag → 按视频标签分组,每个标签算一次平均进度 GROUP BY video_id → 按视频ID分组,每个视频算一次完播率

2.HAVING:过滤聚合结果

  • 核心说明:专门过滤 **GROUP BY分组后的聚合结果 **;不能单独使用,必须和GROUP BY配合。

  • 关键区分WHEREvsHAVING(新手必记,核心考点)

    特性

    WHERE

    HAVING

    执行时机

    聚合计算过滤原始行

    聚合计算过滤分组结果

    过滤对象

    原始行数据

    分组后的聚合结果

    能否用聚合函数

    不能

    (核心)

  • 业务关联:筛选出「平均播放进度 > 60%」的标签、「完播率 > 0.5」的视频,都是过滤聚合结果,必须用HAVING

  • 示例
    HAVING avg_play_progress > 60 → 过滤平均进度超60%的标签 HAVING completion_rate > 0.5 → 过滤完播率超50%的视频

(五)子查询:派生表(FROM 后接子查询)

1. 核心说明

  • 派生表:子查询的结果集相当于一张「临时表」,必须给临时表起别名(如t_progress),否则 MySQL 会报错。

2. 适用场景

  • 当需要先做聚合统计,再对统计结果做二次处理时使用(如先算数字格式的进度,再拼接 % 符号;先算完播率,再排序)。

  • 语法
    SELECT 外层查询字段 FROM ( -- 内层子查询:聚合统计,生成临时表 SELECT 分组字段, 聚合计算 AS 别名 FROM 表1 JOIN 表2 USING(关联字段) GROUP BY 分组字段 HAVING 聚合结果过滤条件 ORDER BY 聚合字段 ) AS 临时表别名; -- 必须加别名!

六、排序:ORDER BY升序 / 降序

  • 核心说明升序(ASC),可手动指定降序(DESC)

  • 语法ORDER BY 排序字段 [ASC/DESC]

  • 示例:ORDER BY avg_play_progress DESC → 按平均播放进度降序
    ORDER BY completion_rate ASC → 按完播率升序(默认可省略ASC)

(六)WHEN 条件判断

1. 内层核心:CASE WHEN ... END多条件判断(比 IF () 更通用)

这是 MySQL 的多分支条件函数,替代了之前的双分支IF(),支持「多个条件→多个返回值」,是处理多状态字段的核心写法,语法和业务逻辑如下:

CASE WHEN 条件1 THEN 结果1 -- 关注:+1 WHEN 条件2 THEN 结果2 -- 取关:-1 ELSE 结果3 -- 无行为:0 END
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 9:23:02

算法题方法调用

一、Integer 类Integer.bitCount(int i):计算整数二进制中 1 的个数Integer.highestOneBit(int i):返回最高位 1 所在的位置对应的整数Integer.lowestOneBit(int i):返回最低位 1 所在的位置对应的整数Integer.reverse():将int类型…

作者头像 李华
网站建设 2026/4/16 18:43:43

Cosplay创作新利器:yz-bijini-cosplay文生图系统体验报告

Cosplay创作新利器:yz-bijini-cosplay文生图系统体验报告 1. 这不是又一个“AI画图工具”,而是专为Cosplayer打造的本地化创作引擎 你有没有过这样的经历: 想为心爱的角色设计一套高还原度的Cosplay造型,翻遍图库找不到理想参考…

作者头像 李华
网站建设 2026/4/17 12:48:02

STM32 USB-CDC虚拟串口开发实战:从配置到数据收发全流程

1. USB-CDC虚拟串口开发入门指南 第一次接触STM32的USB-CDC功能时,我被它强大的灵活性惊艳到了。传统的串口调试需要占用硬件UART资源,而USB-CDC只需要一根USB线就能实现高速数据传输,还能省下一个串口给其他外设使用。更重要的是&#xff0…

作者头像 李华
网站建设 2026/4/18 2:08:12

文件名带时间戳!输出命名规则解析

文件名带时间戳!输出命名规则解析 在使用人像卡通化工具处理图片时,你是否注意过生成文件的命名方式?看似简单的 outputs_20250312142836.png 这类文件名,其实暗含一套清晰、可靠、可追溯的命名逻辑。它不只是随机字符串&#xf…

作者头像 李华
网站建设 2026/4/18 2:07:31

3步解锁Zotero茉莉花插件:让中文文献管理效率提升90%的秘密武器

3步解锁Zotero茉莉花插件:让中文文献管理效率提升90%的秘密武器 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 你是否…

作者头像 李华
网站建设 2026/4/17 23:49:06

VMware macOS兼容工具:让跨平台虚拟化不再受限

VMware macOS兼容工具:让跨平台虚拟化不再受限 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 在数字化开发与测试的日常工作中,许多开发者和设计师常常面临一个共同挑战:如何在非苹果硬件上高…

作者头像 李华