【发布时间】:2020-11-02 12:37:00
【问题描述】:
我试图在某些条件下创建布尔值的输出。
EX:我有 3 个来自不同表的规则/条件,它们彼此不相关。
规则 1:
Select USER_NAME, ID from session_user where age > 25
规则 2:
Select USER_NAME, ID from current_user where plan = 'gold'
规则 3:
Select USER_NAME, ID from customer where group_name='managers'
我的输出应该是:
USER_NAME | ID | Rule 1 | Rule 2 | Rule 3
user1 1 true false true
user2 2 false true true
user3 3 true true true
如果user1 通过规则一,则输出中的值应该是true,如果他通过rule 2,则true 否则false。
解决方案:
SELECT dp.USER_NAME,
dp.ID,
CASE
WHEN dp.sex='F' THEN 'True'
ELSE 'False'
END AS Rule_1,
CASE
WHEN dp.sex='M' THEN 'True'
ELSE 'False'
END AS Rule_2,
CASE
WHEN dp.sex not in ('M','F') THEN 'True'
ELSE 'False'
END AS Rule_3
FROM user_details dp where dp.Organisation='007';
问题:
- 上面的select语句在PRESTO中是有效的方式吗?
- 如果不是,其他选项是什么。
- 我是 PRESTO 的新手,所以很难在 select 中使用 join,当我加入多个表时如何形成相似的输出?任何文档链接都有助于进一步理解。
- 使用
CASE我无法使用COUNT如果我想看到COUNT大于2,我该如何添加规则。(Count(*) > 0) = True else False。 - 我们可以在
CASE中使用SubQuery吗?会影响性能吗?
【问题讨论】:
-
您目前的方法总体上是完全可以接受的。
-
但是当我做
COUNT时我遇到了一些问题,有没有关于我们如何在连接操作上做条件的文档? @TimBiegeleisen