0

そのタイトルは恐らくひどいので、例を挙げて説明してみましょう

_top 10という上位10チームで構成されるテーブルがあります。自宅で上位10チームをプレーしたすべてのチームを選択するために、このクエリを実行できます。

SELECT      g.home_team,
            IFNULL(SUM(g.home_wins), 0) AS formula 
FROM        games g
WHERE 
            away_team IN (SELECT team_id FROM _top_10) 
GROUP BY    g.home_team 
ORDER BY    formula DESC

これにより、自宅でトップ10チームをプレーしたすべてのチームのリストと、自宅でトップ10チームに対して多くの勝利を収めたホームの数が返されます。私がこのリストに含めたいのは、自宅でトップ10チームをプレーしていないすべてのチームであり、明らかに自宅でトップ10チームに勝つためのゼロです。これが理にかなっていることを願っています。

結果を組み合わせるために試したユニオンコードは次のとおりです

SELECT      g.home_team,
            IFNULL(SUM(g.home_wins), 0) AS formula ,
            t.*
FROM        games g
INNER JOIN _top_10 AS t ON g.away_team = t.team_id

UNION

SELECT      g.home_team,
            SUM(0) AS formula ,
            t.*
FROM        games g
LEFT JOIN _top_10 AS t ON g.away_team = t.team_id
WHERE t.team_id IS NULL
GROUP BY    g.home_team 
ORDER BY    formula DESC;

アップデート

私はすべてをまとめました、そして私は得ています

エラーコード:1248。すべての派生テーブルには独自のエイリアスが必要です

これが私の最後のクエリです

SELECT     IF(@last_ranking <> formula, @current_rankings := @current_rankings + 1, @current_rankings)  AS rank, 
            @last_ranking := formula, 
            prequery.team, 
            prequery.formula
FROM        (select @current_rankings := 0) sqlvars, 
            (SELECT    team, 
                        SUM(score) formula 
            FROM (SELECT     g.home_team, 
                            SUM(CASE WHEN t.team_id IS NULL THEN 0 ELSE g.home_wins END) AS formula 
            FROM            games g LEFT JOIN 
                        _top_10 AS t ON g.away_team = t.team_id 
            WHERE       
                        g.season = 2012 AND 
                        g.completed = 1 
        UNION ALL SELECT     g.away_team, 
                        SUM(CASE WHEN t2.team_id IS NULL THEN 0 ELSE g.away_wins END) AS formula 
            FROM        games g LEFT JOIN 
                        _top_10 AS t2 ON g.home_team = t2.team_id 
            WHERE      
                        g.season = 2012 AND 
                        g.completed = 1), 
                            (SELECT @current_rankings := 0, @last_ranking := 0) r 
                GROUP BY team ORDER BY formula DESC ) prequery;

どんな助けでも大歓迎です

4

1 に答える 1

1

JOININ述語の代わりにテーブル:

SELECT      g.home_team,
            IFNULL(SUM(g.home_wins), 0) AS formula ,
            t.*
FROM        games g
INNER JOIN _top_10 AS t ON g.away_team = t.team_id
GROUP BY    g.home_team 
ORDER BY    formula DESC;

自宅でトップ10チームをプレーしていないチームを獲得するには、次のコマンドを使用LEFT JOINWHERE t.team_id IS NULLます。

SELECT      g.home_team,
            IFNULL(SUM(g.home_wins), 0) AS formula ,
            t.*
FROM        games g
LEFT JOIN _top_10 AS t ON g.away_team = t.team_id
WHERE t.team_id IS NULL
GROUP BY    g.home_team 
ORDER BY    formula DESC;

アップデート:

これは、1つのクエリを使用して実行できます。

SELECT 
  g.home_team, 
  SUM(CASE WHEN t.team_id IS NULL THEN 0 ELSE g.home_winsEND) AS formula,
  ...
FROM games g 
LEFT JOIN _top_10 AS t ON g.away_team = t.team_id 
GROUP BY g.home_team, ...;
于 2013-03-19T19:55:54.293 に答える