やりたいこと
表題の通りですが、MySQLでGROUP BYを使ったレコードの中に値が特定の文字列を含むどうかを知りたいケースがあったので考えてみました。
方法
以下のようにMAX関数とCASE式を使います。
CASE式では特定の文字列(ここではstring)があれば1をなければ0を返します。
MAX関数では値の最大値を返すので、集計されるレコードの中にcolumn2の値がstringとなるレコードがあれば1。なければ0が返されることになります。
あとはWHERE等を使えば簡単に絞り込むことが可能です。
SELECT
column1,
MAX(CASE WHEN column2 = 'string' THEN 1 ELSE 0 END) AS has_string
FROM
table_name
GROUP BY
column1;