今回はSQL文のANY_VALUE()の使い方のメモです。
Contents
ANY_VALUE()とは
例えば下記のSQL文を考えたとします。
SELECT
customer_id,
name
FROM customers
GROUP BY customer_id;
MySQL5.7以降では「ONLY_FULL_GROUP_BY」という設定があって「GROUP BY」を使ってSELECT文を使う時の対象はGROUP BYをしたカラムかAVG・SUMなどを使っているカラムになります。
しかし上記のSQL文ではSELECT文の対象にnameカラムを指定しているのでエラーが起きます。
こんな時にANY_VALUE()を使うとnameカラムのどれか1つの値を取得してエラーの回避ができます。
使い方
上記のSQL文章に使うと下記になります。
SELECT
customer_id,
ANY_VALUE(name) //←を修正
FROM customers
GROUP BY customer_id;
デメリット
エラーの回避はできますがテーブルが下記の構成になった場合にSQL文で取得する結果の正確さがなくなります。
customer_id | name |
1 | jonio |
1 | あべ |
2 | いさぢ |
GRUOP BYをした時に値が1のnameカラムの値でjonioとあべが同じになっていますがnameはあべかいさぢのどちらかを取得するのでSQL文の結果が変わるかもしれません。
だから値が正確でなくても問題ない時にしか使えない印象です。