如何使用条件对SQL(Oracle)中的多列进行计数?

乌萨玛·阿尔·班纳(Osama Al-Banna)

我正在使用SMS-Gateway,该网关具有多个具有不同编号的收费SMS服务,
每个发送给客户的SMS都有以下4种状态(转发,已交付,已过期,未交付

在此处输入图片说明

现在,我具有用于充电系统的以下first_table,其中包含以下详细信息(TABLE-A

在此处输入图片说明

及以下(表B)包含每个已发送SMS及其ID的状态在此处输入图片说明

以下是我预期的最终结果,可以预测每种短信服务的详细信息:

在此处输入图片说明

起初,我认为仅使用就很容易,COUNT(Case when ...)
但就我而言,我有成千上万的SMS号码(服务),因此,如果使用这种方法,它将像这样:

COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='forwarded' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='delivered' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='expired' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='delivery failed' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='forwarded' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='delivered' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='expired' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='delivery failed' )
...
...
...
...
...
...
...

当您有很多服务时还注意到CASE只能处理250个条件时,上述方法不可行

那么,left outer join使用SMS-ID对(表B)上(表B)的(表A)进行计数并按以下方式预测每个SMS状态的最佳方法是什么

在此处输入图片说明

戈登·利诺夫

我建议条件聚合:

select b.SMS_SHORT_CODE,
       sum(case when status = 'forwaded' then 1 else 0 end) as count_of_forwaded,
       sum(case when status = 'delivered' then 1 else 0 end) as count_of_status,
       sum(case when status = 'expired' then 1 else 0 end) as count_of_expired,
       sum(case when status = 'delivery failed' then 1 else 0 end) as count_of_delivery_failed
from TABLEB b
group by b.SMS_SHORT_CODE ;

请注意,没有JOIN必要。您要汇总的所有数据都在中TABLEB

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL Oracle中按行进行条件条件项计数

使用 SQL 中的组条件进行计数

Oracle SQL-如何根据日期将计数累加到ORACLE中的多列中

如何使用 SQL Oracle 进行连续计数

如何根据条件对多索引数据框中的列值进行计数

如何在SQL中使用where条件对新创建的列进行计数以用于group by

在Oracle SQL表的单独列中显示计数条件的结果

如何根据 SAS/SQL 中的行值进行条件计数?

如何使用proc sql进行某些条件计数

如何使用熊猫基于多个列条件对行进行计数?

使用R中多列的条件对数据进行排序

基于 SQL 中的条件进行计数

对于R data.table,如何使用uniqueN()来对多列中的唯一/不同值进行计数?

如何通过SQL中的列值进行计数?

如何基于SQL Server中的多个列进行计数?

如何使用条件选择SQL中的计数平均值

根据SQL Server中的条件从计数中进行计数

如何在Oracle中使用多个条件进行联接和计数

SQL对同一表中相同ID的多列进行计数

如何根据日期对SQL Server中的多列进行排序

SQL计数多列

如何计算熊猫多列中的计数?

如何从 R 中的多列获取计数?

如何从1列中具有不同条件的2列中进行计数

如何在Python Pandas中对具有计数唯一值的多列进行分组

如何对R中的TRUE或FALSE数据的多列进行制表/计数?

SQL:基于一列中的两个条件进行计数

基于SQL Server中的列进行计数

SQL:使用条件在同一列上进行计数和分组