SQL:根据列中的布尔表达式从列获取值

时间:2019-03-01 20:31:25

标签: sql postgresql

我有这样的查询结果:

|bool Expression | Column A | Column B|
+----------------+----------+---------+
|      true      |    2     |   10    |
|      false     |    3     |   10    |
|      true      |    4     |    8    |

我需要B列的所有值,其中A的所有布尔表达式均为真。 在这种情况下,如果全部正确,则我需要的结果为[8,10]

预先感谢

3 个答案:

答案 0 :(得分:2)

您可以按列b分组:

select columnb
from tablename
group by columnb
having min(boolexpression::int) = 1 and max(boolexpression::int) = 1

答案 1 :(得分:2)

我只会使用布尔聚合函数:

select b
from t
group by b
having bool_and(bool_expression);

顺便说一句,这将正确地处理NULL布尔表达式-即b的值将被过滤掉。

答案 2 :(得分:0)

为什么以下不是解决方法

# single P followed by numbers
df %>% select(matches("^P[0-9]+$"))

# single A followed by numbers
df %>% select(matches("^A[0-9]+$"))

# single capital letter followed by numbers
df %>% select(matches("^[A-Z][0-9]+$"))