首页 >数据库 >mysql教程 >如何在不使用分析函数的情况下高效地选择 MySQL 中每个类别的前几行?

如何在不使用分析函数的情况下高效地选择 MySQL 中每个类别的前几行?

DDD
DDD原创
2024-10-28 19:05:29194浏览

How to Efficiently Select Top Rows per Category in MySQL Without Analytic Functions?

在 MySQL 中选择每个类别的前几行

要从表中的每个类别中检索有限数量的行,您可以使用分析函数。然而,MySQL 并不直接提供这些功能。不过,可以使用变量来模拟它们。

模拟分析函数

以下 MySQL 查询模拟分析函数的功能,以选择每个类别的前 3 行:

<code class="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</code>

说明

  • 子查询从 TBL_ARTIKUJT 表中选择所有行,并初始化两个会话变量 @rownum 和 @category,以跟踪当前排名和类别。
  • 分配给每行的排名表示其在其类别中的位置。当遇到新类别时,排名重置为 1。
  • var_category 用于存储每行的类别。
  • 外部 SELECT 语句过滤子查询,仅选择具有排名的行小于或等于 3。

此方法允许您在不依赖于 MySQL 不支持的分析函数的情况下实现所需的功能。

以上是如何在不使用分析函数的情况下高效地选择 MySQL 中每个类别的前几行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn