0

我正在尝试获取存储在我的数据库中的每个 Web URL 页面的用户总访问次数。
Bellow 是我的 SQL 查询,它将显示 URL 包含该关键字的唯一用户总数。

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%'

。ETC..

我假设我不需要为每个 URL 标题编写 50 多个单独的查询,并且我应该能够通过一次调用获取所有数据。

所以,我的问题是如何将这个查询合并为一个?

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 回答