繁体   English   中英

如何在select语句中包含count / distinct / case / when的列上的where子句中进行过滤

[英]How to filter in the where clause, on a column that is within the select statement and contains count/distinct/case/when

在hadoop上使用SQL。

我有一个ID列表,在此我要计算2种类型的不同来宾评论数据点的总数。 对于guest_review_1我已返回总计。 对于guest_review_2我将总数分为5个范围。

我正在努力的是在guest_review_1的where子句中设置一个过滤器,其中我不包括总计数小于5的属性。

有任何解决方法的想法吗? 嵌套的Select语句可能吗?

包括以下查询示例:

Select 
id,
count(distinct guest_review_1) as "Guest_Reviews",
count(distinct(case when guest_review_2 < 1 then guest_review_1 end)) as Group1,
Count(distinct(case when guest_review_2 >=2 AND guest_review_2 <3 then guest_review_1 end)) as Group2,
From  table_name
Where
guest_review_2 IS NOT NULL
AND guest_review_1 >=5
AND date BETWEEN '2017-01-01' AND '2017-01-31'
Group By id

group_2您的示例查询中的group_1group_2聚合的含义。 但是,您的问题的实质似乎是关于如何基于聚合函数( count )的结果过滤结果集,而不是根据单个输入行的值进行过滤。 Apache Hive通过使用SQL HAVING子句来支持这一点。

在下面的例子中,输入关系包含6个行与id设置为1和4行与id设置为2 该查询包含子句HAVING guest_reviews >= 5 由于存在HAVING子句,结果集仅包含id1的行。 没有将id设置为2输出行。

WITH table_name AS (
    SELECT 1 AS id, 1 AS guest_review_1, 1 AS guest_review_2 UNION ALL
    SELECT 1 AS id, 2 AS guest_review_1, 2 AS guest_review_2 UNION ALL
    SELECT 1 AS id, 3 AS guest_review_1, 3 AS guest_review_2 UNION ALL
    SELECT 1 AS id, 4 AS guest_review_1, 4 AS guest_review_2 UNION ALL
    SELECT 1 AS id, 5 AS guest_review_1, 5 AS guest_review_2 UNION ALL
    SELECT 1 AS id, 6 AS guest_review_1, 6 AS guest_review_2 UNION ALL
    SELECT 2 AS id, 1 AS guest_review_1, 1 AS guest_review_2 UNION ALL
    SELECT 2 AS id, 2 AS guest_review_1, 2 AS guest_review_2 UNION ALL
    SELECT 2 AS id, 3 AS guest_review_1, 3 AS guest_review_2 UNION ALL
    SELECT 2 AS id, 4 AS guest_review_1, 4 AS guest_review_2
)
SELECT
    id,
    count(DISTINCT guest_review_1) AS guest_reviews,
    count(DISTINCT(CASE WHEN guest_review_2 < 1 THEN guest_review_1 END)) AS group_1,
    count(DISTINCT(CASE WHEN guest_review_2 >= 2 AND guest_review_2 < 3 THEN guest_review_1 END)) as group_2
FROM table_name
WHERE guest_review_2 IS NOT NULL
GROUP BY id
HAVING guest_reviews >= 5
;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM