我需要从下表中选择“捆绑包”条目,但前提是捆绑包存在,否则从每个发行版中选择音轨1。每个发行版都有一个唯一的“ cat_no”,这就是为什么我需要使用GROUP BY的原因。

SELECT * FROM cds
WHERE genre='rock'
GROUP BY cat_no
ORDER BY ABS(track) DESC
LIMIT 0,3


这是我尝试过的方法,但是当有该发行版的捆绑包时,有时我会进入轨道1。



genre cat_no  track
rock  001     1
rock  001     2
rock  001     bundle
rock  002     1
rock  002     2
rock  002     bundle
rock  003     1
rock  003     2

最佳答案

尝试在分组之前对记录进行排序-

SELECT * FROM
  (SELECT * FROM cds WHERE genre = 'rock' ORDER BY IF(track = 'bundle', 0, 1)) t
GROUP BY
  cat_no;

关于mysql - MYSQL GROUP BY和ORDER BY与ABS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9682932/

10-12 15:46