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 中使用布尔值输出结果的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法将程序中找到的布尔结果的正确值分配给布尔变量并使用结果检查条件?

计算 Python 列表中真正布尔值的数量

在python中获取随机布尔值?

强制转换为布尔值是检查是不是存在与键匹配的 unordered_map 值的有效方法吗? C++

整数 浮点数 列表 字典 布尔值 格式化输出 输出

Python第七天_布尔值的应用