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

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

Susan Sarandon
Susan Sarandon原创
2024-10-30 10:34:27865浏览

How to Get the Top 3 Rows From Each Category in MySQL Without Analytic Functions?

从 MySql 中的每个类别中选择前 3 行

在一个包含大量记录和一个类别列的表中,任务是检索仅每个类别的前两篇文章。为了实现此目的,用户最初尝试创建视图 limitrows,将检索的行数限制为每个类别两行。然而,这种方法被证明是不够的。

理解分析函数

想要的结果需要使用分析/窗口/排名函数。这些 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

变量@rownum和@category分别用于跟踪行号和当前类别。通过使用这些变量,确定每一行在其类别中的排名,并选择排名前 3 名的行。

自定义结果集

以确保仅返回所需的列,在 SELECT 语句中指定所需的列,如下所示:

SELECT x.articleid, x.title
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

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

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