MySQL查询:如何获取作者唯一的最新3篇文章
解决获取最新3篇作者唯一文章的SQL问题
嘿,我来帮你搞定这个SQL问题~首先得指出你原来的语句存在两个明显问题:
- 字段名写错啦:表中的作者字段是
author_id,但你写成了user_id DISTINCT的逻辑不符合需求:DISTINCT是对整行数据去重,而不是单独针对author_id。因为每个id本身就是唯一的,所以(id, author_id)的组合本来就不会重复,这条语句根本起不到去重作者的作用。
正确解法1:使用窗口函数(推荐,逻辑清晰)
窗口函数是处理这类「分组取最值」问题的最优方案之一,代码如下:
SELECT id FROM ( SELECT id, author_id, -- 按作者分组,组内按文章id降序排序,给每篇文章标序号 ROW_NUMBER() OVER (PARTITION BY author_id ORDER BY id DESC) AS rn FROM article ) t -- 只保留每个作者最新的那篇(序号为1的) WHERE rn = 1 -- 按文章id降序取前3个 ORDER BY id DESC LIMIT 3;
执行这条语句后,就能得到你预期的结果:7、5、3。
正确解法2:使用关联子查询
如果你用的数据库不支持窗口函数(比如一些老版本的MySQL),可以用关联子查询实现:
SELECT a.id FROM article a -- 筛选出每个作者对应的最大文章id WHERE a.id = (SELECT MAX(id) FROM article WHERE author_id = a.author_id) ORDER BY a.id DESC LIMIT 3;
这个逻辑是先找到每个作者发布的最新文章id,再把这些id收集起来,按降序取前3个,同样能得到正确结果。
内容的提问来源于stack exchange,提问作者D555
相关产品推荐
相关产品推荐

