PostgreSQL 更新のRETURNING 結果に対して GROUP BY を実行する

UPDATE tablename SET column = value WHERE ~
RETURNING ~

に続けて GROUP BY を書いて利かせたいと思ってそのまま書いてはダメである。

WITH 句を使う。

例)

WITH sampleupdate AS (
   UPDATE samples SET
   delete_flg = true
   WHERE delete_flg = false
   RETURNING color
)
SELECT
    color, COUNT(color)
FROM sampleupdate
GROUP BY color

削除フラグ を true にした行の color 列を GROUP BY 指定してカウントした例である。