根据第三列计算具有相同值的对的查询

Query that countes pairs with same values depending on third column

我有三列:Team_CodeIDtimes_together。 我正在尝试计算 ID 具有相同“Team_Code”并向其添加 times_together 的次数。 换句话说-我正在尝试编写一列的所有对,检查它们在其他原始数据中具有相同值的次数,然后向其中添加第三个原始数据。

问这个问题的简单方法是图片:

值可以出现两次(例如 1110 与 8888 接着 8888 与 1110).

您可以在 team_code 上自行加入 table 并总结 times_together:

SELECT t1.id, t2.id, SUM(t1.times_together)
FROM   mytable t1
JOIN   mytable t2 ON t1.team_code = t2.team_code AND t1.id != t2.id

如果你想确保每一对只出现一次,你可以添加一个条件来始终取左边较低的id:

SELECT t1.id, t2.id, SUM(t1.times_together)
FROM   mytable t1
JOIN   mytable t2 ON t1.team_code = t2.team_code AND t1.id < t2.id

我会建议这个自连接 SQL 它采用所有可能的 ID 对(但仅在第一个小于第二个的情况下),并使用 CASE 求和 times_together 同队出场的人:

select     t1.id,
           t2.id,
           sum(case when t1.Team_Code = t2.Team_Code 
                then t1.times_together
                else 0
           end) times_together
from       t as t1
inner join t as t2 
        on t1.id < t2.id
group by   t1.id, t2.id
order by   1, 2

示例中的输出是:

|   id |   id | times_together |
|------|------|----------------|
| 1028 | 1110 |              0 |
| 1028 | 2220 |              0 |
| 1028 | 8888 |              0 |
| 1110 | 2220 |              1 |
| 1110 | 8888 |              1 |
| 2220 | 8888 |              6 |