PRESTO 中使用布尔值输出结果的有效方法
Posted
技术标签:
【中文标题】PRESTO 中使用布尔值输出结果的有效方法【英文标题】:Effective way in PRESTO to Result output with Boolean values 【发布时间】: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
【参考方案1】:
PrestoDB 支持布尔值,因此不需要 CASE
表达式:
SELECT dp.USER_NAME, dp.ID,
(dp.sex = 'F') AS Rule_1,
(dp.sex = 'M') AS Rule_2,
(dp.sex not in ('M','F')) AS Rule_3
FROM user_details dp
WHERE dp.Organisation = '007';
PrestoDB(与所有数据库一样)支持 CASE
表达式中的子查询。
【讨论】:
请教我如何使用COUNT
并查询加入操作是否也可以在规则中使用?
@DonOfDen 。 . .问一个新的问题,这样的COUNT()
和JOIN
是合适的。
提出了一个带有详细信息的新问题***.com/questions/62874110/…。以上是关于PRESTO 中使用布尔值输出结果的有效方法的主要内容,如果未能解决你的问题,请参考以下文章
为啥我无法将程序中找到的布尔结果的正确值分配给布尔变量并使用结果检查条件?