设置:数据存储在hadoop上,查询存储在impala中。
我正在尝试创建一个查询,它允许我对我们从客户机看到的交付进行细分(他们的交付是我们在给定时间段内在数据库中看到的所有行的计数)。为了做到这一点,我需要排除我们在一行上重复计算的地方,所以我们不计算2+行,只计算1。
此示例中的双重计数是指两列具有完全相同的行数据。
示例:在下表中,我应该能够运行一个查询,因此我从“c4”的计数中删除了第1行,因为前2行的2列匹配。
TABLE = table
c1 = string
c2 = bigint
C1 || C2 || C3 || C4
--------------------------
a || 1 || a || 1
a || 1 || a || 1
a || 2 || b || 1
a || 3 || a || 1
a || 4 || b || 1
b || 2 || c || 1
c || 1 || d || 1
c || 2 || d || 1
返回所有行的当前查询:
SELECT c1,
c3,
count(c4) AS 'delivery'
FROM table
WHERE c1 = 'a'
GROUP BY c1, c3
根据我在网上查到的内容,我需要创建一个子查询来识别这些行,但是我没有幸运地正确地做到这一点,我进入了一个兔子洞,在那里我尝试创建一个新行,它将下面的两列组合在一起:
SELECT
UNIQUE = c2 + cast(c1 as BIGINT)
FROM table
WHERE month = month(now())
从这一行开始,我只想回顾一下那些独特的行,但我相信可能有类似的方法来实现我的目标。
从上表示例中,我希望看到以下结果:
c1 c3 delivery
a a 2
a b 1
感谢您的推荐。
1条答案
按热度按时间jpfvwuh41#
我想你需要窗口功能。对于唯一行:
对于聚合:
如果您想要后者,还可以使用: