繁体   English   中英

SQL Server合并查询

[英]SQL Server Combining queries

我正在尝试获取数据库中存储的每个Web URL页面的用户总访问次数。
贝娄是我的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%'

。等等..

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

因此,我的问题是如何将该查询合并为一个查询?

好的,如果您没有要在表上检查的关键字,那么可悲的是,您正在查找的查询如下:

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

有很大的不同,对吗?您可以在不触摸查询的情况下在该表上添加或删除关键字,非常方便。

听起来您需要按URL分组:

SELECT urlCol, COUNT(DISTINCT userId) as title1TotalVisitors
FROM someTable
GROUP BY urlCol
SELECT COUNT(DISTINCT userId) as title1TotalVisitors,urlCol 
FROM someTable
WHERE urlCol LIKE '%Url-Title-[1-50]%'
Group by urlCol 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM