我有一个这样的产品表:
Product name , Affiliate ID , ProductCode
a, 1, 1
b, 1, 2
c, 1, 3
d, 1, 5
e, 1, 7
f, 2, 4
g, 2, 6
我想从每个联属网络营销 ID 返回前四个产品。 “ProductCode”列表示添加产品的顺序,因此我可以使用此列对结果进行排序。但是我不知道如何从每个 Affiliate ID 返回前四个结果?如果我使用“组”函数,它只返回一行每个附属 ID。
最佳答案
查看此链接中的示例:
Within-group quotas (Top N per group)
这正是您所需要的。
SELECT AffiliateId, ProductCode
FROM (
SELECT
AffiliateId, ProductCode,
IF( @prev <> ID @rownum := 1, @rownum := @rownum+1 ) AS rank,
@prev := ID
FROM your table
JOIN (SELECT @rownum := NULL, @prev := 0) AS r
ORDER BY AffiliateId, ProductCode
) AS tmp
WHERE tmp.rank <= 4
ORDER BY AffiliateId, ProductCode;
关于sql - MySQL - 将行分组为 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3342461/