Улей запрос с количеством - PullRequest
0 голосов
/ 01 марта 2019

У нас есть таблица Hive, как показано ниже:

Hive Table

Мы хотели бы видеть вывод, как показано ниже:

Output

Для каждой даты отображается количество клиентов, которые купили каждый фрукт.если никто не купил фрукты на этот день, замените их на 0 вместо NULL.Любой запрос Apache для достижения этой цели высоко ценится

Обновление: будет только четыре продукта: яблоки, бананы, виноград и апельсины.мы не хотели бы найти различные даты и различные продукты.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Используйте cross join для генерации строк, а затем left join и group by для расчета:

select d.date, p.product, count(t.date) 
from (select distinct date from t) d cross join
     (select distinct product from t) p left join
     t
     on t.date = d.date and t.product = p.product
group by d.date, p.product
order by d.date, p.product;

Подсказка, которая вам нужна cross join, заключается в том, что некоторые из возвращенных значений 0, поэтому комбинации данных, не входящие в исходные данные, должны быть «сгенерированы».

0 голосов
/ 01 марта 2019

Если ваша RDMS поддерживает COUNT(DISTINCT ...), это простой агрегированный запрос:

SELECT mydate, product, COUNT(DISTINCT customer)
FROM mytable
GROUP BY mydate, product

PS: обычно не рекомендуется именовать столбец date, поскольку это противоречит омониму sqlтип данных.Я изменил его на mydate в запросах.


Без COUNT(DISTINCT ...) вам потребуется использовать подзапрос:

SELECT mydate, product, COUNT(*)
FROM (SELECT DISTINCT mydate, product, customer FROM mytable) x
GROUP BY mydate, product
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...