小编典典

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

mysql

我有一个带有记录的表,并且有一个名为的行category。我插入了太多文章,并且我只希望从每个类别中选择两篇文章。

我试图做这样的事情:

我创建了一个视图:

CREATE VIEW limitrows AS 
   SELECT * FROM tbl_artikujt ORDER BY articleid DESC LIMIT 2

然后我创建了这个查询:

SELECT * 
FROM tbl_artikujt 
WHERE 
   artikullid IN
   (
      SELECT artikullid
      FROM limitrows
      ORDER BY category DESC
   )
ORDER BY category DESC;

但这不起作用,只给我两个记录吗?


阅读 326

收藏
2020-05-17

共1个答案

小编典典

LIMIT仅停止语句返回的结果数。您正在寻找的通常称为分析/窗口/排序功能-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

如果不进行更改SELECT x.*,则结果集将包含rankvar_category值-如果不是这种情况,则必须指定您真正想要的列。

2020-05-17