たとえば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円
みたいな集計データが出てくる例はあるのだけれど、この単価は最大値が出てくるか最小値が出てくるか、何も決まっていない、みたいなことが起こってしまうのです。