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

Patricia Arquette
发布: 2024-10-27 23:23:30
原创
544 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!