首页 > 数据库 > mysql教程 > 如何在MySQL中选择每个类别的前两篇文章?

如何在MySQL中选择每个类别的前两篇文章?

Mary-Kate Olsen
发布: 2024-10-29 12:02:02
原创
669 人浏览过

How to Select the Top Two Articles from Each Category in MySQL?

MySQL 查询:从每个类别中选择前两篇文章

在 MySQL 中,通常可以实现从表中提取指定数量的行使用 LIMIT 子句。但是,当要求基于分组选择多行时,需要采用不同的方法。本文解决了一个特定场景,即从表中的每个类别中选择两行。

最初,用户尝试通过创建一个视图来限制行,然后使用子查询来检索所需的行来实现此目的记录。然而,这种方法只返回了两条记录。

解决方案在于利用通常所说的窗口函数。 MySQL 本身不支持窗口函数,但可以使用用户定义的变量来模拟其功能,如下所示:

SELECT x.*
FROM (
  SELECT t.*,
    CASE
      WHEN @category != t.category THEN @rownum := 1
      ELSE @rownum := @rownum + 1
    END AS rank,
    @category := t.category AS var_category
  FROM TBL_ARTIKUJT t
  JOIN (SELECT @rownum := NULL, @category := '') r
  ORDER BY t.category
) x
WHERE x.rank <= 3;
登录后复制

在此修订后的查询中:

  • 外部查询从表 TBL_ARTIKUJT (x.*) 中选择列。
  • 括在括号中的内部查询计算每个类别中每行的排名。它还定义了两个用户定义的变量@rownum和@category,用于跟踪当前行号和类别。
  • WHERE子句过滤结果以仅包含排名为3或更少的行.

这种方法有效地模拟窗口函数来分组并从每个类别中选择所需的行。如果目的是仅检索原始列,则可以修改外部查询以指定特定列名称而不是 x.*.

以上是如何在MySQL中选择每个类别的前两篇文章?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板