【问题标题】:To write a query where it would extract the number of requests on various fields . [closed]编写一个查询,它将提取各个字段的请求数。 [关闭]
【发布时间】:2012-06-15 15:05:04
【问题描述】:

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

1> 查询类型 2> 计数

此结果集应具有以下结构

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

例如:

如果在请求栏中找到“greenhopper”一词,那么 属于类型 GREENHOPPER 。

如果找到“gadgets”这个词,它的类型就是 DASHBOARD 。和 以此类推……

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

因此最后我可以获得使用量,然后我可以构建 一个饼图出来吧。

【问题讨论】:

    标签: sql sql-server


    【解决方案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'd 一起。

    【讨论】:

    • 它有效。非常感谢:)
    【解决方案2】:
    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

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

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

    【讨论】:

    • 非常感谢这个查询完美地工作 alrite 。但是当我使用 Microsoft Reporting Service 在饼图中显示时,它会给出错误 ".5pt is not a valid unit designator Valid unit designators are in, mm ,cm,pt,pc" 。请你也帮我解决这个问题
    • 不确定是什么原因造成的,但我怀疑它是否相关。也许把它作为一个新问题提出来,它会得到更多的曝光。只是一个想法,是否有可能获得 0.5 分?
    • 即使我也很困惑。任何方式非常感谢您的帮助
    猜你喜欢
    • 2016-07-28
    • 2011-12-09
    • 2013-01-04
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多