代码之家  ›  专栏  ›  技术社区  ›  The111

如何生成计数为零的合成组

  •  0
  • The111  · 技术社区  · 5 年前

    想象一下,我有这些数据:

    id   |   category
    1    |   cat_1
    2    |   cat_3
    3    |   cat_3
    4    |   cat_1
    

    请注意,没有 cat_2 价值观存在,但我知道 cat2 是一个可能的值,我希望报告能够反映这一点。

    如果我写一个简单的查询 COUNT 项目和 GROUP BY 类别,我最终得到:

    category   |   count(item)
    cat_1      |   2
    cat_3      |   2
    

    当我想要:

    category   |   count(item)
    cat_1      |   2
    cat_2      |   0
    cat_3      |   2
    

    使用普通ANSI SQL,没有特定的方言。。。获得我想要的结果的最有效方法是什么?我能想到一些特别棘手的方法,但必须有一种更干净的方法。

    1 回复  |  直到 5 年前
        1
  •  3
  •   Tim Biegeleisen    5 年前

    理想情况下,你应该有一个专门的 category 表,它跟踪所有存在并应出现在查询输出中的类别。如果失败,您可以尝试内联一个子查询,该子查询包含您要显示的所有类别:

    SELECT
        c.category,
        COUNT(t.id) AS cnt
    FROM
    (
        SELECT 'cat_1' AS category UNION ALL
        SELECT 'cat_2' UNION ALL
        SELECT 'cat_3'
    ) c
    LEFT JOIN yourTable t
        ON c.category = t.category
    GROUP BY
        c.category;