sql - MySQL - 将行分组为 4

标签 sql mysql grouping

我有一个这样的产品表:

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/

相关文章:

sql - 如何按日期排序但按特定列值 SQL 分组

php - 使用php拉取特定表行列数据以html形式输出

MYSQL - 选择不在表 B 中的表 A 行,除了这些行在表 C 中

c# - 在 C# 中将 SQL 查询中的项目添加到列表框

mysql - 由于数据库凭据无效,kamailio 无法启动

mysql - 如何修复 NOT NULL 错误(错误代码 : 1064)?

r - 过滤组,其中一个变量的最大值,另一个变量等于特定值

excel - 如何在Excel中的列中应用分组值

r - 转换小时 :min:sec column of type character to time

mysql - 从两个不同的表中选择数据同时覆盖不同的记录时获取重复值