2011-08-12 124 views
3

我在使用MySQL,我有一个表中有一个列(我正在制作一个类到期日期表)。以前我有查询,如下所示:在查询中使用ORDER BY GROUP BY

SELECT * FROM duedates_f2011 ORDER BY anothercolumn 

为了防止重复发生(基于交货期列),我不得不改变它,如下所示:

SELECT * FROM duedates_f2011 GROUP BY duedate 

目前,它保留了相同的顺序,但我怎么能保证它仍然会这样做呢?我读过的GROUP BY教程中没有任何内容表示它仍然会对其进行排序,并且之后添加ORDER BY声明不正确。有什么我错过了,还是有其他我应该添加,以确保它保持秩序?

(在我的标签显示,我使用PHP来运行查询)

+1

'ORDER BY'是你想要的,但它可能不工作,因为与'GROUP BY'相关的其他问题。你可以用两个子句显示你的语句,并指出'SELECT'子句中包含哪些列? – bobs

+0

尽管'GROUP BY'对于MySQL来说是足够的保证和排序,但我认为最好的做法是包含'ORDER BY'子句(它是允许的,并且是明确的文档,您希望在特定请注意,MySQL与其他数据库引擎不同,它们不保证没有ORDER BY子句的查询结果集的排序(例如,我们观察到旧版本的Oracle以GROUP BY顺序返回行,但这是该组操作产生的副作用,而不是保证,后续版本的Oracle不会以GROUP BY顺序返回行)。 – spencer7593

回答

0

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

但是,如果你想group by duedateorder by anothercolumn,实现了一两件事:SQL不知道要为anothercolumn其价值,当你按交货期...

编辑:从mysql manual

如果您使用GROUP BY,则根据GROUP BY 列对输出行进行排序,就好像您对同一列具有ORDER BY一样。

+0

我相信这是足够的,如果它按我分组的列进行排序。谢谢! – muttley91

+1

mysql不接受* order by ... group by *和这个分组列的自动排序对我来说是新的(如果存在的话) –

+1

@guido它是'group by ... order by'。 –

1
SELECT * FROM duedates_f2011 GROUP BY duedate ORDER BY anothercolumn; 

这是根据MySQL manpages

+0

该答案已被低估,但似乎有效:S也许这是出于原因Tomas Telensky上面提到,我决定只使用GROUP BY方法,谢谢! – muttley91

+0

+1这是一个很好的答案,最好的做法是包含'ORDER BY'子句,尽管它在MySQL中不是必需的,因为MySQL保证t他的行将以“GROUP BY”顺序返回。其他数据库没有相同的保证。 – spencer7593

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)