sql—presto中使用布尔值输出结果的有效方法

kqlmhetl  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(455)

我试图在某些条件的基础上创建boolen值的输出。
输出:

例:我有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 正在传递规则1值应该是 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(计数(*)>0)=真,否则为假。
我们能用吗 SubQueryCASE ? 它会影响性能吗?

dffbzjpn

dffbzjpn1#

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

我不明白你剩下的问题和你的问题有什么关系。但是,stackoverflow问题仅限于一个问题。所以请随便问另一个问题。但是prestodb(和所有数据库一样)支持 CASE 表达。

相关问题