MySql 查询 : Select top 3 rows from table for each category

标签 mysql view limit

我有一个包含记录的表,它有一个名为 category 的行。我插入了太多文章,我只想从每个类别中选择两篇文章。

我试图做这样的事情:

我创建了一个 View :

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;

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

最佳答案

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 值 - 您将拥有如果不是这种情况,请指定您真正需要的列。

关于MySql 查询 : Select top 3 rows from table for each category,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3140589/

相关文章:

MYSQL - 我将如何导出仅指定某些字段的表?

c# - 分析MySQL数据库中的电话记录

php - MySQL 中的 LIMIT 结果?

tcp - 我是使用 1 个端口进行 1000 个连接,还是使用 1000 个端口,每个端口有 1 个连接?

php - 为用户报价创建唯一 ID

mysql - MySQL 中的用户是谁?

python - 如何在 Flask-Admin 中显示角色与用户的关系?

sql-server - 无法使用 INSTEAD OF 触发器更新 View

ios - 在 Swift 中更改 UINavigationBar 字体

MYSQL JOIN TWO TABLES (+ LIMIT based on the first table)