首页  >  文章  >  数据库  >  如何在没有分析函数的情况下从 MySQL 中选择每个类别的前 3 行?

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

Patricia Arquette
Patricia Arquette原创
2024-10-27 23:23:30545浏览

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

从 MySQL 中的多个类别中选择前 3 行

从表中的每个类别中选择前 3 行可能具有挑战性。正如最初尝试中所述,一种利用视图和子查询的方法可能会返回不正确的结果。

更有效的方法是使用分析函数,而 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>

此查询使用 JOIN 操作初始化变量 @rownum 和 @category。然后,它根据每一行的类别为其分配排名,如果类别发生变化,排名就会递增。

最后,查询仅选择排名为 3 或更低的行。请注意,您可能需要修改 SELECT x.* 子句以仅包含所需的列。

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

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