将ORDER BY与已具有GROUP BY的查询一起使用

时间:2011-08-12 18:16:24

标签: php mysql sql group-by sql-order-by

我正在使用MySQL,并且我有一个表在列中有日期(我正在制作一个类的截止日期表)。以前我的查询如下:

SELECT * FROM duedates_f2011 ORDER BY anothercolumn

为了防止重复出现(基于duedate列),我必须按如下方式进行更改:

SELECT * FROM duedates_f2011 GROUP BY duedate

目前,它保留了相同的订单,但我怎样才能确保它仍然会这样做?我读过的GROUP BY教程中没有任何内容表明它仍会对其进行排序,之后添加ORDER BY语句是不正确的。是否有我缺少的东西,或者我还应该添加其他东西以确保它保持有序?

(如我的标签中所示,我使用PHP来运行查询)

3 个答案:

答案 0 :(得分:1)

SELECT * FROM duedates_f2011 GROUP BY duedate ORDER BY anothercolumn;

这是根据MySQL manpages

答案 1 :(得分:1)

如何首先选择分组,然后再按照此顺序执行此操作?

SELECT * FROM
   (SELECT * FROM duedates_f2011 GROUP BY duedate) a
ORDER BY anothercolumn

我认为没有任何理由让您按照分组列进行订购。 大胆!需要更多的数据库!它应该屈服于你的每一个心血来潮!

mysql> SELECT Jump FROM YourDatabase;
+----------------+ 
| Jump           |
+----------------+
| How high?      |
+----------------+
1 row in set (0.00 sec)

答案 2 :(得分:0)

您可以使用group by ... order by ...(按此顺序)。如果仅使用group by,则该列将自动对其进行排序。

但是,如果您想要group by duedateorder by anothercolumn,请实现一件事:当您通过duedate进行分组时,sql不知道要为另一列采用哪个值...

修改:来自mysql manual

  

如果使用GROUP BY,则输出行将根据GROUP BY进行排序   列,就好像你有相同列的ORDER BY一样。