Поиск процента в качестве подзапроса в Impala - PullRequest
3 голосов
/ 24 апреля 2020

Я пытаюсь найти процент, используя результаты двух отдельных подзапросов. В обоих запросах используется счетчик одного и того же столбца, один из которых использует предложение 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.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Если вы не используете одну из последних версий (3.1.0 или выше), Impala не поддерживает несколько count(distinct) s в одном операторе, см. 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
0 голосов
/ 24 апреля 2020

С условной агрегацией:

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