-3

源表

我想写一个查询,它会给出两列:

1> 查询类型 2> 计数

此结果集应具有以下结构

在此处输入图像描述

这里应该预定义第一列的值,并且必须计算计数。我想检查源表的请求列并找到特定的模式。如果找到该模式,则增加计数。

例如 :

如果在请求列中找到单词“greenhopper”,则属于类型 GREENHOPPER 。

或者

如果找到一个单词“gadgets”,它是 DASHBOARD 类型。等等 ...

所以想通过日志表来分析一下各个类别的使用情况。

因此,最后我可以得到使用量,然后我可以用它构建一个饼图。 在此处输入图像描述

4

2 回答 2

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的陈述。

于 2012-06-15T15:12:45.273 回答
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 不在这里执行

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

例如 LIKE 'GET /rest/gadget%' 等等。

于 2012-06-15T15:34:43.297 回答