SQL相当于COUNTIFs Excel公式?

Posted

技术标签:

【中文标题】SQL相当于COUNTIFs Excel公式?【英文标题】:SQL equivalent of COUNTIFs Excel formula? 【发布时间】:2019-05-31 23:30:10 【问题描述】:

我正在尝试在 Netezza Aginity SQL 中重新创建一些 excel 公式,以便可以在数据库级别完成处理,但遇到计数问题。

公式大致为:

If( Countifs( policycolumn, policy, matchcolumn, "Match", codecolumn, code) >0, "true", "false")

因此,如果有任何行匹配策略和“匹配”和代码,它将大于 0 并且为真。我只是在策略部分苦苦挣扎,因为要计算的策略是该行中的策略。

人们有没有什么方法可以用来模仿 sql 中的计数?

编辑:举一些例子,我的数据集看起来像:(对不起,我的格式不好):

policycolumn  |  matchcolumn  |  codecolumn

12345         | match         | c

12345         | no match      | d

9876          | match         | c

9876          | no match      | c

我想要一个额外的列来显示

policycolumn  |  matchcolumn  |  codecolumn | yesno

12345         | match         | c           | yes

12345         | no match      | d           | no

9876          | match         | c           | yes

9876          | match         | d           | no

第 1 行是肯定的,因为它计算 12345 出现的次数,带有“匹配”和“c”。此行匹配,因此将 >0 并触发 IF 规则为“是”

ROw 2 不会是肯定的,因为尽管它的策略编号为 12345,但它是“不匹配”和“d”。

第 3 行是“是”,因为该行策略编号 9876 是“匹配”和“c”。

第 4 行不是“是”,因为该行策略编号 9876 是“不匹配”。

必须满足所有条件(匹配列 = match 和 Codecolumn = c)才能使该行为真,并将新列设置为“是”。

【问题讨论】:

您能以不涉及 Excel 的方式解释您正在尝试做什么(示例输入数据、示例输出)吗? 不确定我是否理解整个问题,但听起来您只想在几个条件下使用SUM SELECT SUM(CASE WHEN a=b AND c=d AND e=f THEN 1 ELSE 0 END) FROM mytable 除非您提供完整的一组输入行和所需的输出行,否则上述答案可能与我们得到的一样接近... 谢谢,对不起,我添加了一些额外的信息和一个我已经投入和希望得到的例子,希望它有所帮助。我试图匹配 countif 在 Excel 中执行的逻辑,所有条件都需要为真才能计算一次。一旦满足所有条件并计数一次,包装 COUNTIF 的 IF 就很容易复制。 在标准 SQL 中,您可以使用 count(*) filter (where ...) - 但我不知道 Netezza 是否支持 【参考方案1】:

这个 SQL 应该满足你的要求。

select policycolumn, matchcolumn, codecolumn, 
case when matchcolumn = 'match' and codecolumn = 'c' then 'yes' else 'no' end yesno
from <your table>

测试结果

with test_data_set as(
  select 12345 policycolumn, 'match' matchcolumn, 'c' codecolumn union all
  select 12345, 'no match', 'd' union all
  select 9876, 'match', 'c' union all
  select 9876, 'match', 'd')
select policycolumn, matchcolumn, codecolumn, 
case when matchcolumn = 'match' and codecolumn = 'c' then 'yes' else 'no' end yesno
from test_data_set;

*returns*
policycolumn matchcolumn codecolumn yesno
12345   match   c   yes
12345   no match    d   no
9876    match   c   yes
9876    match   d   no

如果有帮助请告诉我

【讨论】:

以上是关于SQL相当于COUNTIFs Excel公式?的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL用countifs算出结果都为0?

EXCEL通俗易懂讲公式:sumif,sumifs,countif,countifs

Excel中COUNTIFS函数统计词频个数出现次数

Excel VBA Countifs 与循环

excel中countifs函数如何使用?

自动填充 Application.Countifs.Formula VBA Excel