繁体   English   中英

对SQL语句中的一个对象进行多次计数

[英]Multiple counts on one object in an SQL statement

我知道有很多关于这个主题的帖子,但似乎都没有适用。 所以我会尽量做到描述性的。 我正在尝试创建一个对象,该对象计算查看,导出和评论的次数。 在我看来,首先查询必须找到对象,然后它必须从Impala DB中提取记录(行)计数。

它从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。

你忘了system = in or statments ......

select object, sum(case when action = 'viewed' and (system = 'sys_a' or system ='sys_b') then 1 else 0 end) viewCount,
               sum(case when action = 'exported' and (system = 'sys_a' or system ='sys_b') then 1 else 0 end) exportCount,
               sum(case when action = 'commented' and (system = 'sys_a' or system ='sys_b') then 1 else 0 end) commentCount from events;

检查案例陈述输出:

SELECT object,
  case when action = 'viewed' then 1 else 0 end as view,
  case when action = 'exported' then 1 else 0 end as export,
  case when action = 'commented' then 1 else 0 end as comment
FROM events
WHERE system = 'sys_a' OR system = 'sys_b'

我删除了像Marc B建议的系统表格案例陈述

不知道为什么,但无论如何,我会尝试添加

GROUP BY object;

对你的查询..因为没有它,你会得到意想不到的结果。

只有在此修改之后,您才能尝试并了解下一步要修复的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM