0

データベースに保存されている各WebURLページのユーザーの合計訪問数を取得しようとしています。
以下は、URLにそのキーワードが含まれている一意のユーザーの総数を表示するSQLクエリです。

SELECT COUNT(DISTINCT userId) as someUrlTitleTotalVisitors
FROM someTable
WHERE urlCol LIKE '%someUrlKeyword%'

これで、あと50ページ以上になります。例:

SELECT COUNT(DISTINCT userId) as anotherUrlTitleTotalVisitors
FROM someTable
WHERE urlCol LIKE '%anotherUrlKeyword%'

。等..

URLタイトルごとに50以上の個別のクエリを作成する必要はなく、1回の呼び出しですべてのデータを取得できるはずです。

だから、私の質問は、このクエリを1つにまとめるにはどうすればよいですか?

4

3 に答える 3

3

テーブルでチェックしたいキーワードがない場合、悲しいことに、次のようなクエリを探しています。

SELECT  CASE WHEN urlCol LIKE '%Url-Title-1%' THEN 'Url-Title-1'
        WHEN urlCol LIKE '%Url-Title-2%' THEN 'Url-Title-2'
        WHEN urlCol LIKE '%Url-Title-3%' THEN 'Url-Title-3'
        WHEN urlCol LIKE '%Url-Title-4%' THEN 'Url-Title-4'
        ..... END Url,
        COUNT(DISTINCT userId)  TotalVisitors
FROM someTable
WHERE urlCol LIKE '%Url-Title-1%'
OR urlCol LIKE '%Url-Title-2%'
OR urlCol LIKE '%Url-Title-3%'
OR urlCol LIKE '%Url-Title-4%'
.....
GROUP BY CASE WHEN urlCol LIKE '%Url-Title-1%' THEN 'Url-Title-1'
         WHEN urlCol LIKE '%Url-Title-2%' THEN 'Url-Title-2'
         WHEN urlCol LIKE '%Url-Title-3%' THEN 'Url-Title-3'
         WHEN urlCol LIKE '%Url-Title-4%' THEN 'Url-Title-4'
         ..... END

これらのキーワードをテーブルに入れることができれば、クエリは次のようになります。

SELECT  B.KeyWord,
        COUNT(DISTINCT userId)  TotalVisitors
FROM someTable A
INNER JOIN TableWithKeywords B
ON A.urlCol LIKE '%' + B.KeyWord + '%'
GROUP BY B.KeyWord

かなりの違いですよね?クエリに触れることなく、そのテーブルのキーワードを追加または削除できるので、非常に便利です。

于 2012-11-13T15:48:30.140 に答える
1

URLでグループ化する必要があるようです:

SELECT urlCol, COUNT(DISTINCT userId) as title1TotalVisitors
FROM someTable
GROUP BY urlCol
于 2012-11-13T15:35:32.507 に答える
-1
SELECT COUNT(DISTINCT userId) as title1TotalVisitors,urlCol 
FROM someTable
WHERE urlCol LIKE '%Url-Title-[1-50]%'
Group by urlCol 
于 2012-11-13T15:34:41.357 に答える