1

私のDATAサンプルが

team name  score1  score2
Adele's     15      18
Madonna   16       3
Britanny    9        12

両方の列を使用してスコアの上位 5 リストを取得するにはどうすればよいですか - 私の出力は

Adele's   18
Madonna   16
Adele's   15
Britanny  12
4

3 に答える 3

2

Derek Kromm の回答は、チームが上位 5 位以内に 2 つの同一のスコアを持っている場合のバグを回避するために、わずかな変更が必要です (たとえば、マドンナのスコア 1 とスコア 2 が両方とも 16 であることを除いて、例と同じです)。ユニオンのデフォルトの動作は、重複する行を削除することであるため、スコアの 1 つだけが保持されます。質問に基づいて、これは望ましい動作ではないと思います。ユニオンに「all」キーワードを追加すると、このバグを防ぐことができます。

select * from (
  select team, score1 from tbl
  union all select team, score2 from tbl) a
order by score1 desc
limit 5;

私はそうするのに十分な評判がないことを除いて、これを Derek Kromm の回答へのコメントとして投稿したでしょう。回答として投稿することが正しいエチケットでない場合は申し訳ありません。

于 2011-09-10T01:15:21.757 に答える
1
SELECT "team name" AS team_name, GREATEST(score1, score2) AS max_score FROM users ORDER BY max_score DESC LIMIT 5

純粋に補足として、可能であれば、データベースの「チーム名」列の名前を team_name に変更する価値があります。これにより、データのクエリと操作がはるかに簡単になります:)

于 2011-09-09T23:44:10.380 に答える