我一直在寻找一个简单的SQL查询来解决一个非常简单的问题。我一直在进行一个非常简单的社交共享活动,我们有一个包含2个字段的mysql数据库:email和AffiliateID
SELECT
users.Email, users.ID,
users.AffiliateID,
Count(users.AffiliateID) as afid
from users
order by afid desc
当我运行此查询时,它仅返回1条记录,其中正确的计数仅是最高计数。
我想要的是按数据库中具有“ affiliateID”记录最多的人排序的所有用户的列表。
这将告诉我们谁在共享竞赛中获得一等奖。
这里有一些类似的问题,但是这些解决方案似乎不适用于这种情况。
我想要的是系统中所有用户的降级输出,并由其父级(赞助商)排名,因此我们可以构建类似于“排行榜”的东西
Group By Count and Total Count
MySQL: Count total in Group by Query
谢谢您的帮助!
这是更新的查询
select u.Email, AffiliateID, count(u.AffiliateID) as afid
from users u
where SiteID=17
group by u.Email
order by afid desc
这会生成上方的图像...
但这不是我所需要的。我需要的是509218用户首先显示,然后是他所推荐的用户数,然后是下一个用户5dd ..然后是第三名和第四名,分别是471和472。
答案 0 :(得分:3)
您应该添加group by
(以获取每个用户的结果)子句:
select u.AffiliateID, count(u.Email) as afid
from users u
group by u.AffiliateID
order by afid desc
如果您需要users
表中的更多数据,则可以使用join
表users
进行以下查询:
select u.ID, u.Email, t.afid
from users u
join (
select AffiliateID, count(ID) as afid
from users
group by AffiliateID
) t on u.ID = t.AffiliateID
order by t.afid desc