在 Impala 中查找百分比作为子查询
Finding percentage as a subquery in Impala
我正在尝试使用两个单独的子查询的结果来查找百分比。
两个查询都使用同一列的计数,一个使用 where 子句,一个使用整个集合。
第一次查询:
SELECT COUNT(DISTINCT(col1))
FROM table
WHERE LOWER(col2) NOT IN ("value1", "value2")
第二次查询:
SELECT COUNT(DISTINCT(col1))
FROM table
我需要以下结果:
(first query)/(second query) *100
作为百分比,但我不确定如何做到这一点,因为 Impala 不允许在 select 语句中使用子查询。
有条件聚合:
SELECT
100.0 * COUNT(DISTINCT CASE WHEN LOWER(col2) NOT IN ("value1", "value2") THEN col1 END) / COUNT(DISTINCT col1)
FROM table
或:
SELECT 100.0 * COUNT(DISTINCT col1) / (SELECT COUNT(DISTINCT col1) FROM table)
FROM table
WHERE LOWER(col2) NOT IN ("value1", "value2")
除非您使用的是最新版本之一(3.1.0 或更高版本),否则 Impala 不支持在一条语句中包含多个 count(distinct)
,请参阅 IMPALA-110。
也许您可以使用 CTE 将查询拆分为多个语句。例如:
WITH q1 AS {
SELECT COUNT(DISTINCT(col1)) count1
FROM table
WHERE LOWER(col2) NOT IN ("value1", "value2")
),
q2 AS (
SELECT COUNT(DISTINCT(col1)) count2
FROM table
)
SELECT 100 * q1.count1 / q2.count2 result
FROM q1, q2
我正在尝试使用两个单独的子查询的结果来查找百分比。 两个查询都使用同一列的计数,一个使用 where 子句,一个使用整个集合。
第一次查询:
SELECT COUNT(DISTINCT(col1))
FROM table
WHERE LOWER(col2) NOT IN ("value1", "value2")
第二次查询:
SELECT COUNT(DISTINCT(col1))
FROM table
我需要以下结果:
(first query)/(second query) *100
作为百分比,但我不确定如何做到这一点,因为 Impala 不允许在 select 语句中使用子查询。
有条件聚合:
SELECT
100.0 * COUNT(DISTINCT CASE WHEN LOWER(col2) NOT IN ("value1", "value2") THEN col1 END) / COUNT(DISTINCT col1)
FROM table
或:
SELECT 100.0 * COUNT(DISTINCT col1) / (SELECT COUNT(DISTINCT col1) FROM table)
FROM table
WHERE LOWER(col2) NOT IN ("value1", "value2")
除非您使用的是最新版本之一(3.1.0 或更高版本),否则 Impala 不支持在一条语句中包含多个 count(distinct)
,请参阅 IMPALA-110。
也许您可以使用 CTE 将查询拆分为多个语句。例如:
WITH q1 AS {
SELECT COUNT(DISTINCT(col1)) count1
FROM table
WHERE LOWER(col2) NOT IN ("value1", "value2")
),
q2 AS (
SELECT COUNT(DISTINCT(col1)) count2
FROM table
)
SELECT 100 * q1.count1 / q2.count2 result
FROM q1, q2