我知道在这个问题上有很多帖子,但没有一篇似乎适用。所以我会尽量做到尽可能描述性。我试图创建一个对象来计算它被查看,导出和评论的次数。在我看来,首先查询必须找到对象,然后必须从Impala DB中提取计数记录(行)。在SQL语句中对一个对象进行多次计数
它从2个系统之一'sys_a'或'sys_b'中检索此信息。 所以在我的半伪代码:
select object, sum(case when action = 'viewed' and (system = 'sys_a' or 'sys_b') then 1 else 0 end) viewCount,
sum(case when action = 'exported' and (system = 'sys_a' or 'sys_b') then 1 else 0 end) exportCount,
sum(case when action = 'commented' and (system = 'sys_a' or 'sys_b') then 1 else 0 end) commentCount
from events;
不幸的是,当我有重复的,出口在我events
表,我知道我有对象,我的所有计数为0
换句话说 - 我的目标3421AA2B已远销13倍,但它仍然具有0 计数我知道这是因为,如果我做一个简单的
select count(*)
from events
where object = '3421AA2B' and action = 'exported' and (system = 'sys_a' or system = 'sys_b');
我的计数显示为13.
必须添加GROUP BY目的; –
无法看到为什么重复记录很重要。你不是分组,只是做一些基本的过滤。如果没有别的,愚蠢只会增加计数,而不是零。并注意,由于您在所有sum(case语句)中执行了SAME sys_a/sys_b测试,因此您可以将sys_a/sys_b测试移到通用的where语句中。 –
增加了group by,didn没关系,我在''系统'附近移除了大括号,现在我正在正确地获取'objects' – jiveturkey