SQL

SQL文のANY_VALUE()が何か?使い方とメリット

今回はSQL文のANY_VALUE()の使い方のメモです。

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_idname
1jonio
1あべ
2いさぢ

GRUOP BYをした時に値が1のnameカラムの値でjonioとあべが同じになっていますがnameはあべかいさぢのどちらかを取得するのでSQL文の結果が変わるかもしれません。

だから値が正確でなくても問題ない時にしか使えない印象です。