1

プレーヤーがお気に入りのスタジアムで試合に負けた回数を確認しようとしています。次のことを試しましたが、正しい値が返されません。

select players.name,
count (case when players.team <> matches.winner and favstadiums.stadium = matches.stadium then 1 else null end) as LOSSES
from players
join favstadiums
on favstadiums.player = players.name 
join matches
on favstadiums.stadium = matches.stadium
group by players.name;

左/右結合も試しましたが、出力に違いはありません。

参照用のデータベースの関係図を次に示します。

ここに画像の説明を入力

何か案は?

4

4 に答える 4

2

あなたのjoin状態では、プレーヤーがスタジアムでプレーしていません。プレーヤーのチームがお気に入りのスタジアムでプレーしたという条件を追加する必要があります。

select players.name,
       SUM(case when players.team <> matches.winner then 1 else 0 end) as Losses
from players join
     favstadiums
     on favstadiums.player = players.name join
     matches
     on favstadiums.stadium = matches.stadium and
        players.team in (matches.home, matches.away)
group by players.name;
于 2013-05-08T19:29:46.837 に答える
1

次のことを試してください。

SELECT  P.name,
        COUNT(DISTINCT M.ID) AS Losses
FROM Player P
INNER JOIN favStadiums FS
    ON P.name = FS.player
INNER JOIN Match M
    ON (P.team = M.home OR P.team = M.away)
WHERE FS.stadium = M.stadium
AND M.winner <> P.team
于 2013-05-08T19:30:22.803 に答える
0

これはうまくいくはずです、チェックしてください

select player.name,
count(match.id) as LOSSES
from player
inner join team
    on player.team = team.name 
left join match
    inner join favStadiums on favstadiums.stadium = matches.stadium and favStadiums.player = player.name
    on (match.home = team.name or match.away = team.name) and match.winner <> team.name     
group by players.name;
于 2013-05-08T19:29:14.023 に答える