如何在impala/sql之前获得不同值的计数?

fdbelqdn  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(381)

我有一个原始表,记录在特定时间段内来商店的顾客ID。使用impala,我想计算每天到商店的不同客户ID的数量(e、 例如,在第3天,到目前为止访问了5个不同的客户)
下面是一个简单的原始表示例:

Day    ID
 1    1234
 1    5631
 1    1234
 2    1234
 2    4456
 2    5631
 3    3482
 3    3452
 3    1234
 3    5631
 3    1234

以下是我想要的:

Day    Count(distinct ID) until that day
 1        2
 2        3
 3        5

有没有办法在一个查询中轻松地完成这项工作?

xam8gpfp

xam8gpfp1#

不是100%确定是否对 Impala 有效
但是如果你有一张table的话。或者你有办法在 Impala 上创建一个派生表。

CREATE TABLE days ("DayC" int);

INSERT INTO days
    ("DayC")
VALUES  (1), (2), (3);

CREATE TABLE days AS
     SELECT DISTINCT "Day"
     FROM sales

您可以使用此查询
postgresql中的sqlfiddledemo

SELECT "DayC", COUNT(DISTINCT "ID")
FROM sales
cross JOIN days 
WHERE "Day" <= "DayC"
GROUP BY "DayC"

输出

| DayC | count |
|------|-------|
|    1 |     2 |
|    2 |     3 |
|    3 |     5 |

更新版本

SELECT T."DayC", COUNT(DISTINCT "ID")
FROM sales
cross JOIN (SELECT DISTINCT "Day" as "DayC" FROM sales) T
WHERE "Day" <= T."DayC"
GROUP BY T."DayC"
rm5edbpk

rm5edbpk2#

试试这个:

select day, count(distinct(id)) from yourtable group by day

相关问题