#sql #presto
#sql #presto
Вопрос:
У меня есть 2 SQL-запроса, которые я пытаюсь выполнить с помощью Presto / AWS Athena, и они выглядят примерно так:
SELECT count(distinct id) as filtered_id,
date_format(from_iso8601_timestamp(mydate), '%Y-%c') AS month_year
FROM table
WHERE value = 'bla'
GROUP BY date_format(from_iso8601_timestamp(mydate), '%Y-%c')
ORDER BY date_parse(month_year, '%Y-%c')
SELECT count(distinct id) as unfiltered_id,
date_format(from_iso8601_timestamp(mydate), '%Y-%c') AS month_year
FROM table
GROUP BY date_format(from_iso8601_timestamp(mydate), '%Y-%c')
ORDER BY date_parse(month_year, '%Y-%c')
Я бы хотел объединить эти результаты в одну таблицу, в основном временной ряд с 2 значениями для соответствующих дат. Я бы хотел, чтобы filtered_id
и unfiltered_id
оставались отдельными столбцами. Я не уверен, как этого добиться, я пытался объединить в одной таблице, но я не могу понять, как фильтровать только для 1 серии.
В принципе, я хочу что-то вроде этого в результате:
filtered_ids, unfiltered_ids, month_year
6, 15, 2020-06
10, 10, 2020-07
10, 20, 2020-08
Ответ №1:
Если я правильно понимаю, вы хотите условную агрегацию:
SELECT count(distinct case when value = 'bla' then id end) as filtered_id,
count(distinct id) as filtered_id,
date_format(from_iso8601_timestamp(mydate), '%Y-%c') AS month_year
FROM table
GROUP BY date_format(from_iso8601_timestamp(mydate), '%Y-%c')
ORDER BY date_parse(month_year, '%Y-%c');
Комментарии:
1. О, это сделало свое дело. У вас есть хорошая ссылка для условной агрегации? Я далек от эксперта по SQL, но сталкиваюсь с этим впервые.