假设我有这张桌子。
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)中执行此操作?我该怎么办?
答案 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条记录。