3

假设我有一张简单的 NBA 球员表:

id,player,mp,ppg(mp - 比赛场次,ppg - 每场比赛得分)。

我需要一个查询来获取所有的人,但将结果分成两部分:

  • 参加过 PPG desc 订购的超过或等于 30 场比赛的球员,
  • 参加 PPG 订购的比赛少于 30 场的玩家 desc

所以理想的输出将是(示例):

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 组中最好的 PPG,它也会在球员参加 30 场以上比赛的组中最差的 PPG 之后下降。

有没有办法在一个查询中做到这一点?我正在使用 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

这假设第二组按mpdesc 排序(如示例),而不是按ppg(如文本)

于 2012-09-19T09:51:58.700 回答
0

首先按 MP>30 订购,然后按 PPG 订购

ORDER BY (CASE WHEN mp >= 30 THEN 1 ELSE 2 END) ASC, PPG DESC
于 2012-09-19T11:15:13.860 回答
0
select player, mp, ppg
from t
order by mp < 30, ppg desc
于 2012-09-19T11:28:19.183 回答