もしMySQLでGROUP BYを指定しなかったら

たとえばSQLサーバやAccessの場合、集計クエリで、集計関数が指定してない列をGROUP BYで括らないと、エラーになったと思う。

たとえば

SELECT customer, MAX(sales) AS max_sales FROM orders;

みたいなSQLを書くとエラーになる。

SELECT customer, MAX(sales) AS max_sales FROM orders GROUP BY customer;
のようにGROUP BYを指定するか
SELECT max(customer) AS max_customer, MAX(sales) AS max_sales FROM orders;
のように集計関数を入れないといけない。

ところがMySQLでは集計関数もなくGROUP BYにも指定しない列があっても構文が走ってしまう。

どうもこれはMySQLのパフォーマンスのためにそうなっているということで、「仕様」ということのようだ。MySQLはもし、customer欄に違う値が入っている場合、どの値を取ってくるかはわからないのである。

 

これ、失敗してしまいました。単価×数量=合計みたいなSQLを持ってくるとき、リンゴは1個120円で売っているかもしれないし、100円で売っているかもしれない。
品名:りんご
単価:100円
数量: 3個
販売合計:340円
みたいな集計データが出てくる例はあるのだけれど、この単価は最大値が出てくるか最小値が出てくるか、何も決まっていない、みたいなことが起こってしまうのです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください