MYSQL通过连接获取求和

MYSQL通过连接获取求和,mysql,Mysql,我正在寻找一个可能的解决方案,它将为我提供用户表中的前3名用户,他们是根据他们的营业额订购的 这是我的用户和事务表的表模式 用户表格 id inviter_id 1 1 2 1 3 1 4 1 5 2 6 3 7 5 8 6 9 1 10 3 11 9 12 1 13 5 14 7 15 11 id payer _id

我正在寻找一个可能的解决方案,它将为我提供
用户
表中的前3名用户,他们是根据他们的
营业额
订购的

这是我的
用户
事务
表的表模式

用户
表格

id     inviter_id
1      1
2      1
3      1
4      1
5      2
6      3
7      5
8      6
9      1
10     3
11     9
12     1
13     5
14     7
15     11

id            payer _id      amount
1             2              200
2             2              100
3             2              50
4             2              10
5             3              400
6             4              200
7             5              100
8             6              50
9             7              100
10            8              50
11            9              50
12            10             100 
13            11             400
14            2              200
15            2              100
16            2              50
17            2              10
18            4              500
说明:
id
表示用户的唯一id,
inviter\u id
表示邀请用户的id

交易

id     inviter_id
1      1
2      1
3      1
4      1
5      2
6      3
7      5
8      6
9      1
10     3
11     9
12     1
13     5
14     7
15     11

id            payer _id      amount
1             2              200
2             2              100
3             2              50
4             2              10
5             3              400
6             4              200
7             5              100
8             6              50
9             7              100
10            8              50
11            9              50
12            10             100 
13            11             400
14            2              200
15            2              100
16            2              50
17            2              10
18            4              500
此处
payer\u id
表示
users
表中的用户

期望输出:

user_id       turnover
//ID 1 should not be included in this table.
2             100         //ID 5 in `users` is referral of ID 2 so summing whatever ID 5 from `transactions` table using `payer_id` column we get : 100 (Sme process for other rows too)
3             150         //ID3's referrals : 6,10 | 50+100
4             0           //ID4's invited no one
5             100         //ID5's referrals : 7,13 | 100
6             50          //ID 6's referrals : 8 | 50
7             100         // ID 7's referrals : 14 | 0 (No rows for ID 14 in transactions table)
8             0           //No referrals invited
9             400         //ID9's referrals : 11 | 400
10            0           //No referrals invited
11            0           //ID11's referrals : 14 | 0 (No rows in txn table)
12            0           //No referrals invited
13            0           //No referrals invited
14            0           //No referrals invited
15            0           //No referrals invited
首先让我解释一下我是如何计算营业额的:

对于users表中的每个
id
,让我们以id:1为例。我检查“邀请者id”列中的2。因此,无论谁在inviter\u id列中的值为2,这些id都被视为id 2的引用。 因此,我需要id 2的所有转介支付的
金额的总和。类似地,对于其他ID,它们应按最高营业额排序

到目前为止,我尝试的是: 这是我的密码

        select u.id AS user_id, u.address AS address, SUM(turnover) AS turnover
        from users u left join
             (select ur.id, ur.inviter_id, SUM(mt.userTurnover) as turnover
                    from users ur left join

                            (select m.payer_id, SUM(m.amount) as userTurnover
                            from matrix m where m.created >= $content_start AND m.type = 'escrow'
                            group by m.payer_id
                            ) mt
                            on mt.payer_id = ur.id

                    where ur.created >= $content_start
              group by ur.inviter_id
             ) ui
             on ui.inviter_id = u.id
                 WHERE u.id != 1 AND u.id != 2 AND u.id != 3 AND u.id != 4
        group by u.id
        order by turnover desc  LIMIT 10;
我得到的是用户本身的金额总和,而不是用户的每个推荐的付费金额。

选择u1.id,COALESCE(sum(tr.amount),0)营业额
来自用户u1
在u1.id=u2.inviter\u id上左加入用户u2
u2.id=tr.payer\u id和u2.id!=u2.邀请者\u id
按u1.id分组

如果您需要usrs.id=1(即包括自引用)的总付款金额,则删除
和u2.id!=u2.邀请者id


如果您不需要users.id=1的最后一行,请根据WHERE条件添加。

谢谢您的帮助!是否已更新问题并添加注释,解释如何添加营业额。
user\u id
7和8的值取自何处?用户7邀请没有付款的用户14,用户8不邀请任何人。为什么用户
id=1存在一个自邀请行,而不为其他所有用户进行考试?(08aa51cef61d0945d035e36e2c3405e3)感谢您指出这一点。那是个错误。我已经更新了所需输出表中的所有行。因为ID1是第一个用户,所以他的邀请者就是ID1本身。无论如何,所需的输出表不应包含ID 1。我很高兴您理解了这个问题@AkinaPerfectly done是否可以获得每个用户id下的引用计数?@YaseenHussain当然,将相应的表达式(count(DISTINCT))添加到输出列表中。