Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在两个不同的组中使用ORDER BY的SQL查询_Mysql_Sql_Database - Fatal编程技术网

Mysql 在两个不同的组中使用ORDER BY的SQL查询

Mysql 在两个不同的组中使用ORDER BY的SQL查询,mysql,sql,database,Mysql,Sql,Database,假设我有一张NBA球员的简单表格: id,玩家,mp,ppg(mp-已进行的比赛,ppg-每场比赛的分数) 我需要一个能得到所有人的查询,但将结果分为两部分: 参与PPG desc订购的30场以上游戏的玩家 玩PPG desc命令的少于30场游戏的玩家 因此,理想的输出是(例如): 第1组)排在第一位(更为重要),因此,即使第2组的PPG高于第1组中的最佳PPG,它也会在该组中最差的PPG之后下降,因为该组的玩家玩了30场以上的游戏 有没有一种方法可以在一个查询中实现这一点?我正在使用m

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

id,玩家,mp,ppg(mp-已进行的比赛,ppg-每场比赛的分数)

我需要一个能得到所有人的查询,但将结果分为两部分:

  • 参与PPG desc订购的30场以上游戏的玩家
  • 玩PPG desc命令的少于30场游戏的玩家
因此,理想的输出是(例如):

第1组)排在第一位(更为重要),因此,即使第2组的PPG高于第1组中的最佳PPG,它也会在该组中最差的PPG之后下降,因为该组的玩家玩了30场以上的游戏

有没有一种方法可以在一个查询中实现这一点?我正在使用mySQL。谢谢

选择*
SELECT * 
FROM tablename
ORDER BY
    CASE WHEN mp >= 30 THEN PPG END DESC,
    CASE WHEN mp < 30 THEN PPG END ASC
从表名 订购人 当mp>=30时,则PPG结束描述, 如果mp<30,则PPG结束ASC
假设
ppq
始终低于1000000,这将起作用:

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

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

先按mp>30排序,然后按ppg排序

ORDER BY (CASE WHEN mp >= 30 THEN 1 ELSE 2 END) ASC, PPG DESC
选择播放器、mp、ppg
从t
按mp<30订购,ppg描述

我认为您的描述中有一个输入错误,您说过在这两种情况下,这两个将由PPG desc订购?!
SELECT 
  * -- or whatever you want
FROM players
ORDER BY IF(mp>=30,1000000+ppg,mp) desc
select id, player, mp, ppg
from 
    playerTable
order by if (mp>=30, 1, 0) desc, ppg desc, mp desc`
ORDER BY (CASE WHEN mp >= 30 THEN 1 ELSE 2 END) ASC, PPG DESC
select player, mp, ppg
from t
order by mp < 30, ppg desc