news 2026/5/9 5:24:00

SQL中如何使用窗口函数实现Top N推荐系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL中如何使用窗口函数实现Top N推荐系统

用 ROW_NUMBER() 配合 PARTITION BY user_id 获取每个用户的 Top N 推荐最稳妥,RANK() 和 DENSE_RANK() 因处理重复分数会导致条数不可控,如并列第1时 RANK() 跳至第3,易使 WHERE rn ≤ N 漏取或超取。窗口函数怎么写才能拿到每个用户的Top N推荐直接用 ROW_NUMBER() 配合 PARTITION BY user_id 是最稳的路,别碰 RANK() 或 DENSE_RANK() —— 推荐场景里重复分数会导致条数失控,比如两个并列第1,RANK() 就直接跳到第3,你设 WHERE rn 可能只返回3条。实操建议:必须用 ORDER BY score DESC(或点击率、预测分等业务指标),升序会把最差的排前面PARTITION BY 字段要和推荐单元严格对齐,比如按 user_id 分就别混进 category,否则分区逻辑错位如果原始数据里有 NULL 分数,ORDER BY 默认把它们排最前或最后(行为因数据库而异),先用 WHERE score IS NOT NULL 过滤更可控MySQL 8.0+ 和 PostgreSQL 的语法差异在哪核心函数名和结构一致,但 MySQL 对子查询嵌套层级更敏感,PostgreSQL 允许在 CTE 里直接加 LIMIT,MySQL 不行。常见错误现象:在 MySQL 里写 SELECT * FROM (SELECT ..., ROW_NUMBER() OVER (...) AS rn FROM t) t2 WHERE rn 没问题;但若外层再套一层 <code>ORDER BY + LIMIT,可能触发“This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’”这类报错。实操建议:MySQL 8.0+ 必须把窗口函数结果当“中间表”用,别试图在窗口子句里塞 LIMITPostgreSQL 可以用 WITH ranked AS (SELECT ..., ROW_NUMBER() OVER (...) AS rn FROM t) SELECT * FROM ranked WHERE rn ,更清爽SQLite 直接不支持窗口函数(除非是 3.25+ 且编译时启用了 ENABLE_WINDOW_FUNCTIONS),别试性能崩了怎么办:大表跑 ROW_NUMBER() 卡死窗口函数本质要扫描全分区数据排序,用户量一过百万、推荐池超千万,OVER (PARTITION BY user_id ORDER BY score) 就容易 OOM 或超时。关键原因不是函数本身,而是没做前置裁剪——你真需要对每个用户在 100 万候选里排 Top 10?大概率不需要。 Tellers AI Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 3:55:06

电子书管理神器:OpenClaw+千问3.5-27B自动分类Calibre书库

电子书管理神器&#xff1a;OpenClaw千问3.5-27B自动分类Calibre书库 1. 为什么需要自动化电子书管理 作为一个电子书爱好者&#xff0c;我的Calibre书库已经积累了超过5000本电子书。每次新增书籍时&#xff0c;手动填写元数据、打标签、整理分类成了最痛苦的工作。更糟糕的…

作者头像 李华
网站建设 2026/4/10 3:47:19

OpenClaw+Phi-3-mini-128k-instruct:自动化竞品分析报告生成器

OpenClawPhi-3-mini-128k-instruct&#xff1a;自动化竞品分析报告生成器 1. 为什么需要自动化竞品分析 作为一位连续创业者&#xff0c;我深知保持市场敏感度的重要性。每周手动检查竞品网站、整理产品更新、制作分析报告&#xff0c;这个过程既耗时又容易遗漏关键信息。直到…

作者头像 李华
网站建设 2026/4/10 3:46:56

CodeMagicianT簿

前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知&#xff0c;本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台&#xff0c;有非常多的配置参数。详细的参数列表可以…

作者头像 李华
网站建设 2026/4/10 3:44:58

LexikJWTAuthenticationBundle源码解析:深入理解JWT认证实现原理

LexikJWTAuthenticationBundle源码解析&#xff1a;深入理解JWT认证实现原理 【免费下载链接】LexikJWTAuthenticationBundle JWT authentication for your Symfony API 项目地址: https://gitcode.com/gh_mirrors/le/LexikJWTAuthenticationBundle LexikJWTAuthenticat…

作者头像 李华