【问题标题】:SQL to count occurrencesSQL 来计算出现次数
【发布时间】:2021-06-20 18:46:06
【问题描述】:

我想在我的表中添加 4 个额外的列(右下方 4 个)。

  • 统计“设备+日期”的出现次数
  • 在与行中的“源”值匹配的分隔列中

这是最后2列的Excel公式,我该如何用SQL编写逻辑?

S1_count_in_the_date:
=COUNTIFS(F:F,F2,A:A,"S1")
--countifs(device+date column, device+date value, source column, "S1")--

S2_count_in_the_date:
=COUNTIFS(F:F,F2,A:A,"S2")
--countifs(device+date column, device+date value, source column, "S2")--

我对 S1_count_in_the_date 的 SQL 尝试:

COUNT(source+device+date) OVER (PARTITION BY device, date)
source device date ... source+device+date device+date S1_count_in_the_date S2_count_in_the_date
S1 A 2021-01-03 S1A2021-01-03 A2021-01-03 1 2
S2 A 2021-01-03 S2A2021-01-03 A2021-01-03 1 2
S2 A 2021-01-03 S2A2021-01-03 A2021-01-03 1 2

提前致谢

【问题讨论】:

  • 向我们展示你在 SQL 中的最佳尝试......并澄清你的数据,我不明白你为什么拥有你所拥有的价值观。
  • COUNTIFS 公式是否仅适用于第 2 行,换句话说:第 3 行是否为 =COUNTIFS(F:F,F3,A:A,"S1")?这不工作COUNT(*) OVER (PARTITION BY device, date, source)

标签: sql sql-server tsql count


【解决方案1】:

最后两列可以是使用group by 单独选择的列。请看下面的 sn-p 看看是否有帮助。

查询:

select 
d.source, d.device, d.date, 
concat(d.source, d.device, cast(d.date as Date)) source_device_date, concat(d.device, cast(d.date as Date)) source_device_date, 
--sdd.sdd_count 
case when sdd.source='S1' then sdd.sdd_count end s1_count, 
case when sdd.source='S2' then sdd.sdd_count end s2_count 
from 
devices d 
join ( 
       select 
            source, device, date, count(*) sdd_count 
       from 
            devices 
       group by source, device, date 
     ) sdd on d.source = sdd.source 
            and d.device=sdd.device 
            and d.date=sdd.date

Fiddle for reference

【讨论】:

  • 非常感谢 praveen,是否可以将“sdd_count”分为两列?我需要根据它们进行计算。另外,由于我的表包含的列比上面显示的多,我无法对计数进行分组,因为如果其他列都添加到 group 语句中,它将只返回 1
  • 我确实使用 case 语句将列拆分为两个。请看看这是否有帮助。希望您不需要 S1_Count 列下的 S2 计数。 dbfiddle.uk/…谢谢
  • 完成。伟大的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多