【发布时间】:2025-11-26 05:35:01
【问题描述】:
背景
我是 SQL 新手。在Windows 10本地使用PostgreSQL 13,我有一张表t:
+--+---------+-------+
|id|treatment|outcome|
+--+---------+-------+
|a |1 |0 |
|a |1 |1 |
|b |0 |1 |
|c |1 |0 |
|c |0 |1 |
|c |1 |1 |
+--+---------+-------+
问题
一开始我没有很好地解释自己,所以我重写了目标。
想要的结果:
+-----------------------+-----+
|ever treated |count|
+-----------------------+-----+
|0 |1 |
|1 |3 |
+-----------------------+-----+
首先,确定曾经被处理过的id。被“对待”意味着与treatment = 1 有任何一行。
其次,用outcome = 1 为这两组中的每一个计算行数。从我的原始表格中,“曾经治疗”的ids 总共有 3 个outcome = 1,可以说,“从未治疗”有 1 `结果 = 1。
我的尝试
我想,通过这样的方式,我可以走得更远:
select treatment, count(outcome)
from t
group by treatment;
但这只会让我得到这个结果:
+---------+-----+
|treatment|count|
+---------+-----+
|0 |2 |
|1 |4 |
+---------+-----+
【问题讨论】:
-
嘿@ErwinBrandstetter,对不起,被从电脑上拉走了。在主帖中查看我的编辑。我试图澄清我想要的东西。 (虽然还没有尝试过你的答案,我现在就这样做。)我真的要求做两件事,我现在意识到:通过我解释的“曾经处理过”的标准来识别不同的
id,以及然后将outcome=1 相加。
标签: sql postgresql aggregate-filter