mysql - 根据组从表中获取前 N 行

标签 mysql sql greatest-n-per-group

我有包含以下列的 Customer_Record 表

customer_id | item_id | item_count
1            2           10
1            3           9
1            4           2
1            5           2
2            2           5
2            4           1
2            8           2
4            1           2            
4            5           3
4            8           7

现在我想根据 item_count 获取每个客户的前 2 件商品 (items_id)。 请帮我解决这个问题。

结果如下:-

customer_id | item_id | item_count
1            2           10
1            3           9
2            2           5
2            4           1
4            1           2            

最佳答案

对于 mysql,您可以使用排名查询来获取每组的最高结果

SELECT t.customer_id,
t.item_id,
t.item_count
FROM (
SELECT t.*,
@rank:= CASE WHEN @group = t.customer_id THEN @rank +1 ELSE 1 END rank ,
@group:= t.customer_id 
 FROM
t
JOIN (SELECT @group:='',@rank:='') t1
ORDER BY t.customer_id ,item_count  DESC
) t WHERE t.rank <=2

Fiddle Demo

关于mysql - 根据组从表中获取前 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25347513/

相关文章:

MySQL 在随机结果中随机化

MYSQL - 无法创建外键

php - MySQL:添加创建和修改的字段

mysql - 以分钟为单位计算两个日期之间的时间差

mysql - 此数据的最有效数据库设计

mysql - 如何使用 MAX() 选择整行?

mysql - 带左连接的sql最小值

mysql - 加密电子邮件在 mysql InnoDB 中应该有什么类型和大小?

python - Django 1.11 - 嵌套的 OuterRef 用法

MySQL为表中的每个人选择前X条记录