Mysql SQL语句中一个对象的多个计数

Mysql SQL语句中一个对象的多个计数,mysql,sql,Mysql,Sql,我知道有很多关于这个主题的帖子,但似乎都不太适用。因此,我将尽可能地描述。我正在尝试创建一个对象,它计算它被查看、导出和评论的次数。在我看来,首先查询必须找到对象,然后它必须从Impala数据库中提取计数记录(行) 它从两个系统之一“sys_a”或“sys_b”检索此信息。 在我的半伪代码中: select object, sum(case when action = 'viewed' and (system = 'sys_a' or 'sys_b') then 1 else 0 end) vi

我知道有很多关于这个主题的帖子,但似乎都不太适用。因此,我将尽可能地描述。我正在尝试创建一个对象,它计算它被查看、导出和评论的次数。在我看来,首先查询必须找到对象,然后它必须从Impala数据库中提取计数记录(行)

它从两个系统之一“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 object;
回答你的问题。。 因为没有它,你会得到意想不到的结果


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

您忘记了
语句中的
系统=

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建议的

您必须按对象添加组;我不明白为什么重复记录会很重要。你没有分组,只是做一些基本的过滤。如果没有其他原因,则重复只会增加计数,而不是将其归零。请注意,由于您在所有总和中都执行相同的sys_a/sys_b测试(case语句,您不妨将sys\u a/sys\u b测试移到general
where
子句中。添加了
groupby
,这无关紧要。我确实移除了
系统
周围的大括号,现在我正确地获取了
对象
。很抱歉,这只是一个输入错误,它真的在那里好了,太好了,现在我得到了每个视图/导出/注释列中都有ne或零。我在每个
案例
语句周围添加了
sum
,并在末尾添加了
groupby
语句,我得到了一些数字。谢谢。它们与简单的
select COUNT(*)不太一致
object=
上的
无法编辑我上面的评论,但我缺少了另一个筛选字段。太棒了!我得到了我期望的数字。谢谢。@jnbender,那么你一开始就做得很好了?怎么了?让我们来看看。