そのタイトルは恐らくひどいので、例を挙げて説明してみましょう
_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;
どんな助けでも大歓迎です