【问题标题】:How to sum case when X=Y group by Y?当 X=Y 按 Y 分组时如何求和?
【发布时间】:2018-08-30 03:39:07
【问题描述】:

我正在尝试编写一个查询,说明如果一个 ID 存在于 all1o1sSC.salesforce_id 中,然后求和它在 all1o1s 中存在的次数。

我写道:

select 
   sc.salesforce_id,
   sum(case when all1o1s.member_id = sc.salesforce_id then 1 else 0) as "1o1 completed count"
from salesforce_contacts as sc 
inner join leenk_1o1s as all1o1s on sc.salesforce_id = all1o1s.member_id    
group by sc.salesforce_id;

我在 sum 行遇到错误。如何构建此查询?

谢谢!

【问题讨论】:

  • 您遇到的错误是什么?
  • ` ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 2 行的 salesforce_contacts as sc inner join leenk_1o' 附近使用“1o1 完成计数”作为“1o1 完成计数”`
  • 具体语法错误是因为你在case语句的末尾没有end语句。但是,你写的 sql 可能达不到你的目的。
  • @sam 非常感谢。对语法有什么想法吗?

标签: mysql sum case-when


【解决方案1】:

试试这个

 select b.salesforce_id,count(1) from all1o1s a,salesforce_contacts b where a.id=b.salesforce_id
group by b.salesforce_id having count(1) > 1

根据您的问题,您需要计数而不是总和

【讨论】:

  • 谢谢!!就是这个。真的很感激。
  • 其实 - 我以为是它,但我不认为它是。它应该返回大于 1 的计数,但事实并非如此。我做了轻微的调整:select b.salesforce_id, count(1) as '1 on 1 count' from leenk_1o1s a,salesforce_contacts b where a.id=b.salesforce_id group by b.salesforce_id order by '1 on 1 count' desc ; 但仍然没有得到正确的计数。想法?
  • 获得 0 条记录。也尝试过:select b.salesforce_id, count(1) as "1 on 1 count" from leenk_1o1s a,salesforce_contacts b where a.id=b.salesforce_id group by b.salesforce_id having count(1) >= 1 order by "1 on 1 count" desc; 但我期望的计数仍然没有超过 1
  • 检查这个 sqlfiddle 它的工作正常sqlfiddle.com/#!9/83114e3/1
  • 啊!抓住了它。在我的表中, id = member_id :D
猜你喜欢
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
相关资源
最近更新 更多