0
book
またはmovie
のいずれかに設定された_type
という列の、selected_media
という名前のpostgres 9.6テーブルがあります。私は、各タイプのCOUNT
を選択したいPG:結果が0の場合、このクエリの合計数を表示するには
は、1つの行に、次のように:
25 | 715
これを行うために、私はこのクエリを持っている:
SELECT
COALESCE(SUM(CASE WHEN _type = 'book' THEN 1 ELSE 0 END), 0) AS books_count,
COALESCE(SUM(CASE WHEN _type = 'movie' THEN 1 ELSE 0 END), 0) AS movies_count
FROM selected_media
WHERE subscriber_id = $1
問題があります2倍:
各列にrespec その_typeの合計数はで、その列の合計が0(選択されていない)の場合にのみ発生します。これは、UI/UXの状態がであるため、「書籍または映画を0で選択することは、すべてを選択することと同じです」です。
SELECT COUNT(*) FILTER (WHERE _type = 'book') AS books_count, COUNT(*) FILTER (WHERE _type = 'movie') AS movies_count FROM selected_media WHERE subscriber_id = $1;
詳細情報here:それは高速であることが必要
、この表には、あなたが
FILTER
句でCOUNT
を使用することができます
これは、私が持っていたものの偉大なリファクタリングです(ありがとう!)、しかしそれはまだ私が必要とするポイント#1をしません。 – Tallboy
私はあなたが必要とするものに少し混乱しています。タイプごとのカウントが0であるとしましょう。したがって、全体のカウントが必要ですか? –
修正。カウントが0以上であればフィルタリングする必要がありますが、0なら単にCOUNT(*)をselected_media WHERE _type = 'x''から選択するだけです(ただし、複数のカウントを組み合わせるなど) – Tallboy