每个用户最多显示3个事务

时间:2016-09-26 12:48:28

标签: mysql sql

假设我有这张桌子。

users|amount
------------
User1|  500
User1|  400
User1|  300
User1|  200
User1|  100
User2|  500
User2|  400
User2|  300
User2|  200
User3|  300
User3|  200

我想为每个用户显示最多3个事务。示例中给出的结果应为此。

users|amount
------------
User1|  500
User1|  400
User1|  300
User2|  500
User2|  400
User2|  300
User3|  300
User3|  200

有没有办法在SQL(MySQL)中执行此操作?我该怎么办?

2 个答案:

答案 0 :(得分:1)

你可以这样尝试

SELECT
    users, amount
FROM (SELECT
    users, amount,
    ROW_NUMBER() OVER (PARTITION BY users ORDER BY amount DESC) AS rn
FROM yourtable) AS a
WHERE a.rn <= 3

答案 1 :(得分:0)

您可以使用变量:

SELECT users, amount
FROM (
  SELECT users, amount,
         @grp := IF(@usr = users, @grp + 1,
                    IF(@usr := users, 1, 1)) AS grp
  FROM mytable
  CROSS JOIN (SELECT @grp := 0, @usr = '') AS vars
  ORDER BY users, amount DESC) AS t
WHERE t.grp <= 3

@grp个变量枚举每个users分区中的记录。外部查询使用此变量来检索每个用户最多 3条记录。