提问者:小点点

SQL查询,将显示该代码中用户之间的平均传输次数小于2的所有代码


User
|uid|admin|match_id|code|
|152|0    |NULL    |PH     |
|66 |1    |2212    |US     |
|66 |0    |1234    |AL     |
|66 |0    |2221    |AL     |


Transfer
|eid|transfer_at|match_id|
|284|2018-11-29 |2001    |
|284|2018-11-30 |2023    |
|284|2018-12-03 |2023    |

当两个用户一起转移时,他们成为“转移”。每次转移有两个用户。一个用户可以有多个匹配项。

当两个用户完成传输时,会在传输表中添加一行。

预期结果-该代码中用户间平均转移次数小于两个的代码

|code|
|PH     |
|US     |
|BR     |

共1个答案

匿名用户

首先左连接交换user并使用聚合来获取每个用户的匹配次数。然后再次聚合以获取每个国家/地区的平均匹配次数。

SELECT x.country
       FROM (SELECT u.uid,
                    u.country,
                    count(e.eid) matches
                    FROM user u
                         LEFT JOIN exchange e
                                   ON e.match_id = u.match_id
                    GROUP BY u.uid,
                             u.country) x
       GROUP BY x.country
       HAVING avg(x.matches) < 2;