2012-04-12 18 views
4

私は基本的にそれは私がカレンダーテーブルのエントリに応じて、自分の位置テーブルを更新したいこのmysqlの二つのテーブル

team1 || team1score || team2|| team2score || time || league 

のように見えるサッカーの試合のためのカレンダーエントリを持つテーブルを持っています。

私は私のテーブルに

Pats || 14 || Saints || 3 || 1stleague 
Cows || 7 || falc || 14 || 1stleague 
Saints || 31 || falc || 3 || 1stleague 
Saints || 14 || cows || 3 || 1stleague 

のようなものを持っている場合ので、例えば私が最初に明確なteam1nameでteam1scoreの列のすべての値を合計するクエリをしたいです。それでは、私は結果が

Saints || 3 
falc || 17 
cows || 3 

だろうのでteam2とteam2scoreために同じことをしたい、それ上記の表は、結果として

Pats || 14 
Cows || 7 
Saints || 45 

を与えるために、私はこれらの二つの結果を参加したいですそして、get:

Pats || 14 
Cows || 10 
Saints || 48 
falc || 17 

を、私はこの

select distinct(t.team1), sum(t.team1score) 
    from calendar t 
    where league = '5a7' 
    UNION 
    select distinct(t2.team2), sum(t2.team2score) 
    from calendar t2 
    where league = '5a7' 
のようなものを試してみました

しかし、同じチームを追加しても何のアイデアも得られません。

私は組合を行うときに合計を取っていないと知っていますが、チーム2の列に一致するチームを持たない値を保持するために組合を行う必要があると思います。しかし、私はどのように組合と和を同時に行うかを理解できません。

答えて

2

は外部クエリに(のみ)スコアを集約、team1とteam2列の和集合を作成するためにサブクエリを使用する:

SELECT LOWER(t.team) team, SUM(t.score) score 
FROM (
    SELECT team1 team, team1score score 
    FROM calendar 
    WHERE league='5a7' 
    UNION ALL 
    SELECT team2, team2score 
    FROM calendar 
    WHERE league='5a7' 
) t 
GROUP BY 1 

編集:UNION、名前/別名を共用体の後のselect文は無視されます。可読性が向上すると思われる場合は、teamscoreを追加できます。ただし、必須ではありません。

編集:LOWER、つまり大文字と小文字を区別しないグループ。

+0

team2scoreによる得点があるべきですか? – user541597

+0

異なる側から値を追加していません。たとえば、私の例では、牛7 +牛3を追加していません。 – user541597