web-dev-qa-db-ja.com

GROUP BYクエリでMAXとMINを取得する方法は?

単純なクエリで

SELECT col1, col2, col3
FROM table1
GROUP BY col1

各行には、colの一意の値ごとにcol2col3の最初の値が含まれます。

col1の各値に対してMAXおよびMINを選択する方法。

何かのようなもの

SELECT col1, minimum of col2, maximum of col2, minimum of col3, maximum of col3
1
Googlebot

信じますか...

SELECT col1, MIN(col2), MAX(col2), MIN(col3), MAX(col3)
  FROM table1
 GROUP BY col1;

...?


各行には、colの一意の値ごとに、col2とcol3の最初の値が含まれます。

その主張は正確には真実ではありません。それはあなたが見ているものかもしれませんが、これが意味のあるものであると仮定しないでください、そしてこの観察に基づいてコードを書かないでください。元のクエリは、GROUP BYの標準SQL処理から逸脱したMySQL拡張にはまったく有効ではありません。

MySQLはGROUP BYの使用を拡張して、選択リストがGROUP BY節で指定されていない非集約列を参照できるようにします。

...これは最初のクエリで行ったものであり、col2とcol3は非集計列(集計関数が適用されていない列であり、group-byにはありません)ではありません。これをすると...

サーバーは各グループから任意の値を自由に選択できるため、それらが同じでない限り、選択された値は不確定です。

http://dev.mysql.com/doc/refman/5.5/en/group-by-extensions.html

13