首页 > 解决方案 > 选择转换的列时如何使用 COUNT 和 GROUP BY(或类似的替代方法)

问题描述

我有一个包含类别的表格列,我想减少类别的数量。以下代码应该清楚:

 SELECT 
     CASE 
        WHEN category_ IN ('cat1', 'cat2') 
           THEN category_ 
           ELSE 'other' 
     END
 FROM 
     mytable

现在假设我想计算三个新类别(cat1、cat2 和其他)中的每一个中有多少观察值。没有子查询我怎么能​​做到这一点?

所需的输出应该类似于

 category_      cnt
 ----------------------------
 cat1           (some number)
 cat2           (some number)
 other          (some number)

我尝试过类似的东西

SELECT 
    CASE 
       WHEN category_ IN ('cat1', 'cat2') 
          THEN category_  
          ELSE 'other' 
    END AS category_new,
    COUNT (CASE WHEN category_ IN ('cat1', 'cat2') THEN category_ ELSE 'other' END)
FROM 
    mytable
GROUP BY 
    (CASE WHEN category_ IN ('cat1', 'cat2') THEN category_  ELSE 'other' END)

我正在使用 TOAD 和 Oracle 数据库

标签: sqloracletoad

解决方案


您的代码应该可以工作,但可以简化为:

SELECT (CASE WHEN category_ IN ('cat1', 'cat2') THEN category_ ELSE 'other' END) AS category_new,
       COUN (*)
FROM mytable
GROUP BY (CASE WHEN category_ IN ('cat1', 'cat2') THEN category_  ELSE 'other' END);

推荐阅读