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

如何在不使用分析函数的情况下从 MySQL 表中的每个类别中选择前 3 行?

Linda Hamilton
发布: 2024-10-29 14:58:02
原创
469 人浏览过

How to Select the Top 3 Rows from Each Category in a MySQL Table Without Using Analytic Functions?

MySQL 查询:从表中的每个类别中选择前 3 行

在这种情况下,您有一个包含大量记录的表,按类别分类。您的目标是仅检索每个类别中的前三篇文章。当您尝试使用视图和 LIMIT 的解决方案时,它导致记录数量有限。

为了应对这一挑战,有必要利用 MySQL 所缺乏的分析函数。但是,您可以使用变量实现类似的效果:

<code class="sql">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>
登录后复制

此查询使用变量 @rownum 和 @category 来跟踪类别内的行排名。它首先将两个变量设置为 NULL/空值。

对于表中的每一行(别名为“t”),它检查当前类别是否与前一个类别不同。如果是,则将 1 分配给 @rownum;否则,它会将 @rownum 加 1。同时,它将当前类别分配给 @category,以维护后续行中比较的上下文。

结果是一个临时表,对类别中的每一行进行排名。然后,最后的 WHERE 子句会过滤此临时表,以仅显示排名为 3 或更低的行。

请记住调整外部 SELECT 子句 (x.*) 中的列引用以匹配您想要的列检索。

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

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