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';
问题:
- 上面的select语句在PRESTO中是否有效?
- 如果不是还有其他选择。
- 我是 PRESTO 的新手,所以很难在 select 中使用联接,当我联接多个表时如何形成相似的输出?任何文档链接都有助于进一步理解。
- 使用
CASE
我无法使用 COUNT
如果我想看到 COUNT
大于 2,我该如何添加规则。 (Count(*) > 0) = 真否则假。
- 我们可以在
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
表达式中的子查询。
我正在尝试根据某些条件创建布尔值输出。
输出:
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';
问题:
- 上面的select语句在PRESTO中是否有效?
- 如果不是还有其他选择。
- 我是 PRESTO 的新手,所以很难在 select 中使用联接,当我联接多个表时如何形成相似的输出?任何文档链接都有助于进一步理解。
- 使用
CASE
我无法使用COUNT
如果我想看到COUNT
大于 2,我该如何添加规则。 (Count(*) > 0) = 真否则假。 - 我们可以在
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
表达式中的子查询。