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;
在此修订后的查询中:
这种方法有效地模拟窗口函数来分组并从每个类别中选择所需的行。如果目的是仅检索原始列,则可以修改外部查询以指定特定列名称而不是 x.*.
以上是如何在MySQL中选择每个类别的前两篇文章?的详细内容。更多信息请关注PHP中文网其他相关文章!