8

架构:

SubscriberId NewsletterIdCsv 
------------ --------------- 
1     48,51,94     
2     43,22
3     33,11
4     90,61 

我需要获取每行 NewsletterIdCsv 的计数,然后将它们全部相加以获得所有行的总数,对于基本行数,我正在执行以下操作:

SELECT newsletteridcsv, len(newsletteridcsv) - len(replace(newsletteridcsv, ',', '')) +1 IndividualCount
FROM DBTABLE

这给了我结果:

NewsletterIdCsv IndividualCount
------------ --------------- 
48,51,94     3
43,22        2
33,11        2
90,61        2

如何获得总计数(在本例中为 9)?

注意:这个表有 500 万条记录,我不认为使用临时表插入计数,然后最后通过临时表行来累积计数是一种优化的方式吗?我也完全反对使用游标来解决效率问题!

获得总数的最佳方法是什么?

4

2 回答 2

14

您可以使用SUM将它们添加在一起:

SELECT SUM(len(newsletteridcsv) - len(replace(newsletteridcsv, ',', '')) +1) 
    AS TotalCount
FROM DBTABLE

由于您只是要求总数,因此您甚至不需要GROUP BY任何东西。

于 2013-02-11T18:38:48.500 回答
3

您已经完成了棘手的部分(len 减去逗号),现在只需运行总和:

SELECT sum(len(newsletteridcsv) - len(replace(newsletteridcsv, ',', '')) +1) as TotalCount
FROM DBTABLE
于 2013-02-11T18:39:06.430 回答