2016-04-30 2 views
1

私は3つの列:Team_Code,ID,times_togetherを持っています。 IDの「Team_Code」が何回あるのかを数え、times_togetherを追加しようとしています。 他の言葉では、私は1つの列のすべてのペアを記述しようとしていて、他のrawで同じ値を何度持っているかチェックし、3番目のrawを追加します。3番目の列に応じて同じ値のペアをカウントするクエリ

この質問をする簡単な方法はとても絵です: enter image description here

EDIT:値は(1110と8888 、その後 8888を例 1110用)を2回表示されます場合、私は気にしません。

+0

私はまだトラブル、あなたが特に探しているものを理解することを抱えている人が同じチームでプレーするときtimes_togetherを合計する210。ユーザーは(IDで識別される)同じチームコードを持つことができ、そのチームコードでリンクされている人の数を数えたいと思う。あなたの出力では、ID 2220が1110で1回好きだったことを示しています.8888は1110と一度リンクされていますが、2220はなぜ8888と11回リンクしていますか?あなたがその時間にどのようにして得たかの裏に数学を示すことができれば、あなたが探しているものをよりよく理解することができます。 – Webeng

+0

'2220 - 8888'の出力が' 11'(なぜ '12'か' 6'であるべきか疑問ですが)の理由は分かりません。最初に追加したのは '5 + 5'ですが、' 1 + 1'には適用されないのはなぜですか(これは '12'を要約します)? '5 + 5'が追加されていない場合、' 5 + 1'(出力は '6')になります(' 433'と ' 「111」というコードの同じチームでは「1」時間)。 –

+0

私はひどいです! 1分で編集します。出力は6でなければなりません。8888はTeam_Code 433で2222、Team_Code 111で5回、5回、 – ALUFTW

答えて

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を取るための条件を追加することができます:私はすべての可能なIDペアを取り、この自己接合SQL示唆

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

(しかしのみここで最初の二未満である)、及びを使用例の場合

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 | 
関連する問題