2011-08-12 157 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)