sql - 选择转换的列时如何使用 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 数据库
解决方案
您的代码应该可以工作,但可以简化为:
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);
推荐阅读
- python - 如何将内存值中的字典数据直接写入 csv 文件中的 s3 存储桶而不写入文件然后上传
- css - 在 nth-child(3n + 3) 中使用 css 变量而不是 3
- git - 在 git 中管理功能依赖项
- javascript - 按在 Mongoose 中创建的日期对引用的 Schema 进行排序
- flutter - FittedBox width > 0 不正确,但仅适用于一个文本小部件
- python - Python 3.7:asyncio.run_in_executor() 返回 RuntimeError “没有当前事件循环错误”
- android - jacoco 抛出错误任务':app:compileDebugJavaWithJavac'的执行失败
- android - switchinf从master到stable后无法构建发布apk
- c++ - (C++) 成员函数比自由函数慢吗?
- javascript - 复制到剪贴板需要大量时间