PostgreSQL で配列のカラムの中の値をカウントする

今回はアンケート機能の集計を実装した際に複数のレコードの配列のカラムから特定の値をカウントするクエリーを書いたので紹介したいと思います。

最初に実装したアンケートのイメージです。
1つの質問に対して複数チェックできるタイプです。

次にデータベースの構造です。ざっくりですがイメージです。
①テーブル名 : questions

②テーブル名 : question_items

③テーブル名 : answers

ここからが本題、テーブル answers のカラム question_item_ids のカウントをスッキリ検索したいと思います。

SELECT 
  id, (
    SELECT 
      count(*) 
    FROM 
      answers 
    WHERE
      q_items.id = ANY(question_item_ids)
  ) 
  FROM 
    question_items AS q_items 
  WHERE
    question_id = 1
;

1発でそれぞれの count が検索できました。

以上です。

最後に自己紹介。
よく使うのはPHPとjQuery, たまに Vue.js, フレームワークは SILEX というのを使っています。データベースは PostgreSQL を使います。
自分のやった作業などをメモする場として note を使いたいと思っています。あとはアウトプットに慣れたい。

よろしくお願いします。

この記事が気に入ったらサポートをしてみませんか?