在Impala中作为子查询查找百分比

问题描述 投票:3回答:2

我正在尝试使用两个单独的子查询的结果来找到百分比。这两个查询都使用同一列的计数,一个查询使用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语句中使用子查询。

mysql subquery impala
2个回答
0
投票

有条件聚合:

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")

0
投票

除非您使用的是最新版本(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 q1.count1/q2.count2 result
FROM q1, q2
© www.soinside.com 2019 - 2024. All rights reserved.