3

質問を組み立てるのが難しいと感じているので、私がやろうとしていることを示します。

Table1 (ID, Name, Score)  
1 Jane  10  
2 Jack  15  
3 Jill  12  
4 Jane  10  


Table2 (ID, Name, Score)  
1 John  11  
2 Jill  14  
3 Jack  16  
4 Jake  15  

私が望む結果は

Result (Name, Table1.Score, Table2.Score)  
Jane 20   NULL
Jack 15   16
Jill 12   14
John NULL 11
Jake NULL 15

名前を主キーにすることはできますか?ジェーンはテーブル1で2回発生し(テーブル2でも発生する可能性があります)、スコアを合計して、その指定されたテーブルで名前を一意にしたいことに注意してください。

4

4 に答える 4

3

UNIONこれを行う1つの方法は次のSUMとおりです。

SELECT T.Name, Sum(T.Score), Sum(T2.Score) Score2
FROM (SELECT Name, SUM(Score) score FROM Table1 GROUP BY Name)  t
  LEFT JOIN (SELECT Name, SUM(Score) score FROM Table2  GROUP BY Name) t2
ON t.Name = t2.Name
GROUP BY T.Name
UNION   
SELECT T.Name, Sum(T2.Score), Sum(T.Score) Score2
FROM (SELECT Name, SUM(Score) score FROM Table2 GROUP BY Name)  t
  LEFT JOIN (SELECT Name, SUM(Score) score FROM Table1  GROUP BY Name) t2
ON t.Name = t2.Name
GROUP BY T.Name

そして、これがSQLFiddleです。

幸運を。

于 2013-02-11T17:09:26.013 に答える
2

これを試して

 select  t1.name , sum(t1.score) as score1 ,sum(t2.score2) as score2 from Table1 as t1
 left JOIN 
 (select  name , score as score2 from Table2 )t2 
 on t1.name = t2.name 
 group by name

 union all

 select  t2.name , sum(t1.score1) as score1, sum(t2.score) as score2  from Table2 as t2
 left JOIN 
 (select  name , score as score1 from Table1 )t1 
 on t2.name = t1.name 
 where score1 is  null

 group by name
 ---- if you want use the order add this "order by name" here in the end

そしてこれは出力します:

  NAME |    SCORE1  |SCORE2
  Jack |     15     | 16
  Jane |     20     |(null)
  Jill |     12     | 14
  Jake |    (null)  | 15
  John |    (null)  | 11

ここSQLFIDDLEDEMO

于 2013-02-11T18:15:43.810 に答える
1

ええと、MySQLが持っていればfull outer join、それを使用するでしょう。別の方法は次のとおりです。

select id, name, MAX(score1) as score1, MAX(score2) as score2
from ((select  id, name, score as score1, NULL as score2
       from table1
      ) union all
      (select  id, name, null as score1, score as score2
       from table1
      )
     ) t
group by id, name

union allアイデアは、を使用してスコアを2つの別々の列に分割することにより、各テーブルから必要なすべての情報を取得し、スコアを異なる列に表示することです。

ファイナルgroup byでは、IDごとに1つの行でそれらをまとめます。

于 2013-02-11T17:09:29.090 に答える
0

これを試して:

select 
name = Table1.name, 
sum(Table1.score) as score1,
sum(Table2.Score) as score2
from Table1
full outer join
Table2 
ON 
Table2.name = Table1.name
where Table1.name is not null
group by table1.name

UNION

select 
name = Table2.name, 
sum(Table1.score) as score1,
sum(Table2.Score) as score2
from Table1
full outer join
Table2 
ON 
Table2.name = Table1.name
where Table2.name is not null
group by table2.name

order by score1 desc, score2
于 2013-02-11T21:49:42.657 に答える