问题描述
我有一个带有类别的表格列,我想减少类别的数量。下面的代码应该清楚:
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);