选择转换列时如何使用COUNT和GROUP BY或类似替代方法

问题描述

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

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

现在假设我想计算三个新类别(类别1,类别2和其他类别)中有多少个观测值。没有子查询该怎么办?

所需的输出应类似于

 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数据库

解决方法

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

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);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...