だから私がそうするとします
SELECT * FROM table t GROUP BY t.id
テーブルに同じ ID を持つ複数の行があるとします。最終的にはその ID の 1 行だけが出力されます...mysql は同じ ID を持つ結果を並べ替え、最初の行または何かを返すと思います....私の質問は...mysqlはこの順序付けをどのように実行するのですか?たとえば、特定のフィールドなどを使用するように順序付けを制御できる方法はありますか?
だから私がそうするとします
SELECT * FROM table t GROUP BY t.id
テーブルに同じ ID を持つ複数の行があるとします。最終的にはその ID の 1 行だけが出力されます...mysql は同じ ID を持つ結果を並べ替え、最初の行または何かを返すと思います....私の質問は...mysqlはこの順序付けをどのように実行するのですか?たとえば、特定のフィールドなどを使用するように順序付けを制御できる方法はありますか?
GROUP BY
いくつかの異なる列を使用して、結果をグループ化する順序を並べ替えることができます。
SELECT * FROM table t GROUP BY t.id, t.foo, t.bar
厳密に正しい SQL では、GROUP BY を使用する場合、選択されるすべての値は、GROUP BY 句で指定された列または集計関数のいずれかである必要があります。モードを設定しない限り、MySQL はこの規則に違反することを許可しonly_full_group_by
ます。ただし、このようなクエリを実行することはできますが、グループ化された列ごとにどの行が選択されるかは指定されていません。
他の列の最大値または最小値に対応する行を選択する場合は、次のようにすることができます。
SELECT a.*
FROM table a
JOIN (SELECT id, max(somecol) maxcol
FROM table
GROUP BY id) b
ON a.id = b.id
AND a.somecol = b.maxcol
両方に最大値がある場合、ID ごとに複数の行が返される可能性があることに注意してください。最後の GROUP BY 句を追加すると、それらのいずれかが任意に選択されます。
この MySQL 拡張機能を標準の SQL GROUP BY 機能に使用する場合、非集計、非 GROUP BY カラムのどの値がサーバーによって選択されるかを制御することはできません。MySQLのドキュメントでは、この特定のケースについて説明し、次のように明確に述べています。
サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。さらに、各グループからの値の選択は、ORDER BY 句を追加しても影響を受けません。