SQL count if columns

前端 未结 2 1691
小鲜肉
小鲜肉 2020-12-08 14:15

What is the best way to create columns which count the number of occurrences of data in a table? The table needs to be grouped by one column.

I have seen

<         


        
2条回答
  •  猫巷女王i
    2020-12-08 14:21

    In Postgres 9.4 there is new, cleaner aggregate FILTER option:

    SELECT category
         , count(*) FILTER (WHERE question1 = 0) AS zero
         , count(*) FILTER (WHERE question1 = 1) AS one
         , count(*) FILTER (WHERE question1 = 2) AS two
    FROM   reviews
    GROUP  BY 1;
    

    Details for the new FILTER clause:

    • How can I simplify this game statistics query?

    If you want it short:

    SELECT category
         , count(question1 = 0 OR NULL) AS zero
         , count(question1 = 1 OR NULL) AS one
         , count(question1 = 2 OR NULL) AS two
    FROM   reviews
    GROUP  BY 1;
    

    Overview over possible variants:

    • For absolute performance, is SUM faster or COUNT?

    Proper crosstab query

    crosstab() yields the best performance and is shorter for longer lists of options:

    SELECT * FROM crosstab(
         'SELECT category, question1, count(*)::int AS ct
          FROM   reviews
          GROUP  BY 1, 2
          ORDER  BY 1, 2'
       , 'VALUES (0), (1), (2)'
       ) AS ct (category text, zero int, one int, two int);
    

    Detailed explanation:

    • PostgreSQL Crosstab Query

提交回复
热议问题