在两个不同的组内使用ORDER BY进行SQL查询

时间:2012-09-19 09:47:15

标签: mysql sql database

假设我有一个与NBA球员合作的简单表:

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

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

  • 参加PPG desc订购的30场以上比赛的球员,
  • 玩PPG desc订购少于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组中的最佳PPG,它也会在玩家超过30场比赛的组中最差的PPG之后下降。

有没有办法在一个查询中执行此操作?我正在使用mySQL。谢谢!

5 个答案:

答案 0 :(得分:1)

select id, player, mp, ppg
from 
    playerTable
order by if (mp>=30, 1, 0) desc, ppg desc, mp desc`

答案 1 :(得分:0)

SELECT * 
FROM tablename
ORDER BY
    CASE WHEN mp >= 30 THEN PPG END DESC,
    CASE WHEN mp < 30 THEN PPG END ASC

答案 2 :(得分:0)

假设ppq始终低于1000000,这将起作用:

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

这假定第二组按mp desc排序(如示例所示),而不是ppg(如文本中)

答案 3 :(得分:0)

首先按MP> 30;然后按PPG

ORDER BY (CASE WHEN mp >= 30 THEN 1 ELSE 2 END) ASC, PPG DESC

答案 4 :(得分:0)

select player, mp, ppg
from t
order by mp < 30, ppg desc