sql - 其中“a”列中每个组的“c”列不为空 - 给“a”组赋值 1
问题描述
“C”列是标志指示器。我想运行一个查询,我可以对不为空的列“c”求和。我希望每组 A 列有 1 个值。
例如组“测试”,总共有 1。组机会总共有 1。组“播放”总共有 0。
结果,我想要一个总数。请在下面查看我的代码。
一个 | C |
---|---|
测试 | 苹果 |
测试 | 橙 |
测试 | |
测试 | 苹果 |
机会 | |
机会 | 苹果 |
机会 | |
玩 | |
玩 |
SELECT
sum(case when distinct A and C is not null then 1 else 0 end) as total
FROM table
解决方案
如果你想要一个标志 per a
if anyc
有一个值,那么你可以使用:
select a, (case when count(c) > 0 then 1 else 0 end) as has_c
from t
group by a;
您实际上可以使用以下sign()
函数来简化它:
select a, sign(count(c)) as has_c
from t
group by a;
如果你想要每行这个,那么使用窗口函数:
select t.*,
(case when count(c) over (partition by a) > 0 then 1 else 0 end)
from t;
显然,如果您只想计算非NULL
值,您将使用count(c)
不带case
表达式的内容。
推荐阅读
- php - array_key_exists 错误莫名其妙
- java - 给定的 Json 对象值不能转换为字符串
- javascript - 从 React 组件内的脚本访问变量
- vue.js - v-select 不显示数据
- html - 为什么表格列会改变大小,我该如何阻止它
- python - Python Argparse - 基于另一个参数的值有条件地需要参数
- javascript - 获取选项标签的名称
- java - Spring Boot:@Autowired 记住并为下一个请求保存相同的对象
- javascript - 只有当另一个动画已经完成时才开始一个 CSS 动画
- python - Pandas 内存泄漏和数据帧排序