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 に答える