3

NBAプレーヤーがいる簡単なテーブルがあるとしましょう。

id、player、mp、ppg(mp-プレイされた試合、ppg-ゲームあたりのポイント)。

すべての人を取得するクエリが必要ですが、結果を2つの部分に分割します。

  • PPGdescによって注文された30以上のゲームでプレイしたプレーヤー
  • PPGdescによって注文された30ゲーム未満をプレイしたプレーヤー

したがって、望ましい出力は次のようになります(例):

n. player    mp ppg

1. player1   82 32.5
2. player2   56 32.1
3. player3   82 29.7
4. player4   80 27.6

..。

70. player70 75 1.5  (lowest in the 30+ games group)
71. player71 29 35.7 (highest in the less than 30 games group)
72. player72 19 31.3

..。

グループ1)が最初に来る(より重要)ので、グループ2)のPPGがグループ1)の最高のものより高くても、プレーヤーが30以上のゲームをプレイしたグループの最悪のPPGの後に下がります。

1つのクエリでそれを行う方法はありますか?私はmySQLを使用しています。ありがとう!

4

5 に答える 5

1
select id, player, mp, ppg
from 
    playerTable
order by if (mp>=30, 1, 0) desc, ppg desc, mp desc`
于 2012-09-19T09:52:45.977 に答える
0
SELECT * 
FROM tablename
ORDER BY
    CASE WHEN mp >= 30 THEN PPG END DESC,
    CASE WHEN mp < 30 THEN PPG END ASC
于 2012-09-19T09:49:52.103 に答える
0

ppq常に 1000000 未満であると仮定すると、これは機能します。

SELECT 
  * -- or whatever you want
FROM players
ORDER BY IF(mp>=30,1000000+ppg,mp) desc

mpこれは、2 番目のグループが (テキストのように) ではなく、desc (例のように) で順序付けられていることを前提としていppgます。

于 2012-09-19T09:51:58.700 に答える
0
select player, mp, ppg
from t
order by mp < 30, ppg desc
于 2012-09-19T11:28:19.183 に答える
0

最初に MP>30 で注文し、次に PPG で注文します

ORDER BY (CASE WHEN mp >= 30 THEN 1 ELSE 2 END) ASC, PPG DESC
于 2012-09-19T11:15:13.860 に答える