我有三列:Team_Code
,ID
,times_together
。
我正在尝试计算ID有多少次具有相同的“Team_Code”并向其添加times_together。
换句话说 - 我正在尝试编写一列的所有对,检查它们在其他原始中具有相同值的次数,并添加第三个原始值。
编辑:我不在乎这些值是否会出现两次(例如 1110与8888 然后 8888与1110)。
答案 0 :(得分:1)
您可以在team_code
上自行加入表格并汇总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
答案 1 :(得分:1)
我建议这个自加入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 |