sql - 如何根据列值使用 Group By?
问题描述
我正在尝试使用 Group By,但无法通过 Date、Shift 和 Mass 实现我想要分组的输出。
数据如下:
date | shift | mass
---------+-------+------
01-05-20 | A | 5
01-05-20 | B | 3
01-05-20 | B | 3
02-05-20 | A | 11
02-05-20 | A | 5
02-05-20 | C | 12
02-05-20 | C | 12
02-05-20 | B | 5
我想要的输出
date | shift | mass>3 | mass>10
---------+-------+--------+--------
01-05-20 | A | 1 | 0
01-05-20 | B | 2 | 0
02-05-20 | A | 1 | 1
02-05-20 | B | 1 | 0
02-05-20 | C | 0 | 2
解决方案
您可以Conditional Aggregation
通过GROUP
ing使用BY mydate,shift
:
SELECT mydate,shift,
SUM(CASE WHEN mass > 3 THEN 1 ELSE 0 END) AS "mass>3",
SUM(CASE WHEN mass >10 THEN 1 ELSE 0 END) AS "mass>10"
FROM t
GROUP BY mydate,shift
ORDER BY mydate,shift;
顺便说一句(正如您在评论中要求的那样),您还可以使用DECODE()
函数:
SELECT mydate,shift,
SUM(DECODE(SIGN(mass-3),1,1,0)) AS "mass>3",
SUM(DECODE(SIGN(mass-10),1,1,0)) AS "mass>10"
FROM t
GROUP BY mydate,shift
ORDER BY mydate,shift
推荐阅读
- xcode - 如何对 MacOS 应用程序进行代码签名?
- python - 具有 3D-CNN s3dg 模型权重的 TensorFlow 训练循环
- asp.net-core - 通过 ASP.NET Core 中的请求标头进行身份验证
- .htaccess - .htaccess 将根文件夹重写为子文件夹
- typescript - TypeScript 对象及其定义中的自动完成
- flutter - 如何制作返回流的方法
修改另一个流后 - r - 根据与 Unix 或 R 中的另一个文件的模式匹配过滤一个文件
- android - 无法确定任务 ':app:lintVitalRelease' 的依赖关系。无法生成签名的 APK
- pyspark - 从 pyspark 中的分层数据中获取深度
- python - 有没有办法继续查询请求期货直到完成?