根据第三列计算具有相同值的对的查询
Query that countes pairs with same values depending on third column
我有三列:Team_Code
、ID
、times_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 |
我有三列:Team_Code
、ID
、times_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 |