Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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排序分组方式_Mysql - Fatal编程技术网

MYSQL排序分组方式

MYSQL排序分组方式,mysql,Mysql,我使用GROUP BY为所有共享相同“cat_no”值的条目只选择一行,因为GROUP BY检索一个随机行,我需要使用ORDER BY ABS(轨道)来确保它选择数据库中轨道编号为“1”的行。然而,一旦我有了这组结果,我就需要在数据库中的另一个字段中按“日期”进行最终排序,但我似乎不能排序两次 SELECT * FROM cds WHERE genre='rock' GROUP BY cat_no ORDER BY date DESC,ABS(track) DESC LIMIT

我使用GROUP BY为所有共享相同“cat_no”值的条目只选择一行,因为GROUP BY检索一个随机行,我需要使用ORDER BY ABS(轨道)来确保它选择数据库中轨道编号为“1”的行。然而,一旦我有了这组结果,我就需要在数据库中的另一个字段中按“日期”进行最终排序,但我似乎不能排序两次

SELECT * FROM cds  
WHERE genre='rock'  
GROUP BY cat_no  
ORDER BY date DESC,ABS(track) DESC  
LIMIT 0,3
Sql只尊重第一个order by子句,在本例中为“date”,如果我交换它们,则使用“track”,忽略“date”

桌子


如果您始终想要跟踪1,则不需要分组:

SELECT * FROM cds
WHERE genre = 'rock' AND track = 1
ORDER BY date DESC
LIMIT 0, 3
如果需要第一个轨迹(不一定是轨迹1),则需要一个子查询:

SELECT * FROM cds c
WHERE genre = 'rock'
AND track = (
    SELECT MIN(track) FROM cds innerq
    WHERE innerq.cat_no = c.cat_no
    LIMIT 1
)
ORDER BY date DESC
LIMIT 0, 3

第二个非常接近,希望我需要使用ABS(track)以某种方式订购曲目,以便选择带有“bundle”作为曲目的条目,而不是曲目1。实际上,它不是按cat no分组,因此显示了两个具有相同cat_no的条目。我将cat_no分组放在ORDER by之前,现在似乎工作正常。
SELECT * FROM cds c
WHERE genre = 'rock'
AND track = (
    SELECT MIN(track) FROM cds innerq
    WHERE innerq.cat_no = c.cat_no
    LIMIT 1
)
ORDER BY date DESC
LIMIT 0, 3