2011-08-12 25 views
3

私はMySQLを使用しており、カラムに日付を持つテーブルを持っています(クラスの予定表を作成しています)。次のようにこれまで私は、クエリを持っていた:ORDER BYを既にGROUP BYのクエリで使用する

SELECT * FROM duedates_f2011 ORDER BY anothercolumn 

次のように私はそれを変更しなければならなかった(duedate列に基づいて)の重複発生を防ぐために:

SELECT * FROM duedates_f2011 GROUP BY duedate 

は現在、それが同じ順序を保持していますしかし、私はそれがまだそうすることをどうすれば保証できますか?私が読んだGROUP BYのチュートリアルの中にはまだソートされていて、後にORDER BYステートメントを追加すると間違っていることが示されています。私は行方不明のものがあるのですか、それとも順番どおりに追加するべきことがありますか?

+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のために取るためにどの値がわからない、あなたのグループduedateによって...

編集mysql manualから

GROUP BYを使用すると、出力行はGROUP BY 列に従ってソートされ、同じ列に対してORDER BYがあるかのようにソートされます。

+0

私は列で注文すれば十分だと私はグループ化しています。ありがとう! – muttley91

+1

mysqlは* by order by group by *を受け付けません。グループ化された列のこの自動ソートは私には新しく(存在する場合) –

+1

@guido 'by by order by'です。 –

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

このMySQL manpagesに応じている(私のタグに示されているように、私は、クエリを実行するためにPHPを使用しています)。

+0

この回答は下落しましたが、うまくいきました。S Tomas私は、単にGROUP BYメソッドを使うことにしました。ありがとう! – muttley91

+0

+1これは良い答えです。ベストプラクティスは、MySQLで必須ではないにもかかわらず、 'ORDER BY'節を含めることです、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)