架构:

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 万条记录,我不认为使用临时表插入计数然后最后通过临时表行来累积计数是一种优化方式吗?
此外,我完全反对使用游标来解决效率问题!

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

最佳答案

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

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

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

10-06 06:37