编写一个查询,它将提取各种字段上的请求数。

时间:2012-06-15 15:05:04

标签: sql sql-server

Source Table

  

我想写一个可以提供两列的查询:

     

1>查询类型2>计数

     

此结果集应具有以下结构

enter image description here

  

此处应预先定义第1列值,并且计数必须为   计算。我想检查源表的Request列和   找到具体的模式。如果发现该模式,则增加计数。

     

例如:

     

如果在请求列中找到“greenhopper”字样,那么   属于GREENHOPPER类型。

     

OR

     

如果找到“小工具”一词,则其类型为DASHBOARD。和   等......

     

所以我想通过使用日志来分析各种类别的用法   表。

     

因此最后我可以获得使用量,之后我可以构建   一张饼图。   enter image description here

2 个答案:

答案 0 :(得分:1)

SELECT 'Greenhopper' AS TypeOfQuery, COUNT(*) AS Cnt
FROM YourTable
WHERE Request LIKE '%Greenhopper%'
UNION ALL
SELECT 'Dashboard', COUNT(*)
FROM YourTable
WHERE Request LIKE '%gadgets%'
-- And so forth

你说他们是预定义的吗?所以你有~10个不同的陈述UNION'在一起。

答案 1 :(得分:1)

WITH Requests AS
(
SELECT
CASE
WHEN Request LIKE '%Greenhopper%' THEN 'GreenHopper'
WHEN Request LIKE '%gadgets%' THEN 'Gadgets'
-- and so on
ELSE 'Misc'
END RequestType
FROM YourTable
)
SELECT
RequestType,
COUNT(*) RequesCount
FROM Requests
GROUP BY RequestType
;

没有要测试的数据,但我相信这种方法会表现得更好,因为表格的扫描时间会更短。由于LIKE和第一张外卡,性能永远不会是理想的。这将阻止寻求。

进一步解释为什么LIKE不执行here

刚看了一下这个问题,您可以通过更改搜索字符串来进一步提高性能,使其在右侧只有一个通配符

e.g。喜欢'GET / rest / gadget%'等等。