PRESTO 中使用布尔值结果输出的有效方法

Effective way in PRESTO to Result output with Boolean values

我正在尝试根据某些条件创建布尔值输出。

输出:

EX: 我有 3 个 rules/conditions 来自不同的表,它们彼此不相关。

规则 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';

问题:

  1. 上面的select语句在PRESTO中是否有效?
  2. 如果不是还有其他选择。
  3. 我是 PRESTO 的新手,所以很难在 select 中使用联接,当我联接多个表时如何形成相似的输出?任何文档链接都有助于进一步理解。
  4. 使用 CASE 我无法使用 COUNT 如果我想看到 COUNT 大于 2,我该如何添加规则。 (Count(*) > 0) = 真否则假。
  5. 我们可以在 CASE 中使用 SubQuery 吗?会不会影响性能?

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 表达式中的子查询。