首先,我要说我对rails和开发还不熟悉。
概述
我有一个简单的推荐系统,我想计算每个订户推荐其他人的次数,然后根据推荐次数按降序排列所有订户。
细节
这是我的Subscribers表:

| id | email | referred_by |

referred_by包含引用订阅服务器的subscriber_id
我想要的是一个方法/查询,它遍历表中的每个订阅服务器,并:
统计其ID在referred_by列中出现的次数。
按用户拥有的转介总数订购用户。
我是按照下面的思路思考的,但我的部分问题是我不知道在哪里以及如何测试代码库之外的方法和查询,所以我不知道如何测试。我假设在控制台中,但我不知道如何在那里执行多部分方法或查询。
Subscriber.all.each do |referrer|
  Subscriber.all.each do |subscriber|
    if referrer.id == subscriber.referred_by
      referrals += 1
    else
      next
    end
  end
end
# Then order descending

最佳答案

Select A.id
      ,A.email
      ,case when B.referrals is null then 0 else  B.referrals end as referrals
 From YourTable A
 Left Join (
        Select referred_by,count(*) as referrals
         From  YourTable
         Where referred_by is not null
         Group By referred_by
      ) B
    On A.id = B.referred_by
 Order By B.referrals Desc,A.email

会退回这样的东西
id  email               referrals
4   [email protected]    3
1   [email protected]    2
2   [email protected]    0
3   [email protected]    0

编辑
如果要排除非引用(零计数),请将左联接更改为内部联接

关于sql - 计算并订购每个推荐人的推荐数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41317407/

10-13 04:44