【问题标题】:When Statments with LIKE and Substrings当带有 LIKE 和子字符串的语句
【发布时间】:2013-05-14 03:46:24
【问题描述】:

我在学校,想弄清楚老师问的这个问题。我没有问过导师,因为他通常会在 2 周后回复我。

以下是问题所在:

使用数据库中的 weblog 表创建一个查询,该查询将使用 WHEN 语句来:

按满足以下条件的origcmd字段对记录进行分类 您的类别应如下所示:

•类别 1 = origcmd 以 GET 开头

•类别 2 = origcmd 以 POST 开头

•类别 3 = origcmd 以 HEAD 开头

•类别 4 = 所有剩余记录

•统计每组的记录 •在不修改字段的情况下平均原始字段的小时部分。

我在没有平均值的情况下尝试了以下方法,因为我无法使用以下方法正确拉动它:

Select CASE 
WHEN origcmd LIKE "GET%" THEN "Category 1"
WHEN origcmd LIKE"POST%" THEN "Category 2"
WHEN origcmd LIKE "HEAD%" THEN "Category 3"
Else "Category 4 All of left over records" END as "Original CMD",
Count(*) AS Total
FROM WebLog 

使用它时,它只会拉出第一行 WHEN 并忽略除计数之外的所有其余行。我是新手,很难理解 MySQL。我想我可能需要使用 SubString cmd,但希望在这里有一点帮助。

问候,

【问题讨论】:

    标签: mysql substring sql-like case-when


    【解决方案1】:

    更新:

    SELECT category,
           CASE category WHEN 1 THEN 'GET' WHEN 2 THEN 'POST' WHEN 3 THEN 'HEAD' ELSE 'OTHER' END command,
           COUNT(*) rec_count, 
           ROUND(AVG(SUBSTRING(origdate, 14, 2))) avg_hour
    FROM
    (SELECT w.*, 
            CASE WHEN LEFT(origcmd, 3) = 'GET'  THEN 1
                 WHEN LEFT(origcmd, 4) = 'POST' THEN 2
                 WHEN LEFT(origcmd, 4) = 'HEAD' THEN 3
            ELSE 4 END category
       FROM WebLog w) q
     GROUP BY category
    

    输出:

    | CATEGORY | COMMAND | REC_COUNT | AVG_HOUR |
    ---------------------------------------------
    |        1 |     GET |         4 |       10 |
    |        2 |    POST |         3 |       14 |
    |        3 |    HEAD |         1 |       17 |
    |        4 |   OTHER |         2 |        6 |
    

    SQLFiddle

    【讨论】:

    • 感谢您的回答。我认为这可能会有所帮助。字段如下:IPNO、DUNNO、DUNNO2、origdate、origzone、origcmd、recode、bytes。记录如下:96.247.122.214, -, -, [15/Mar/2008:16:36:09, -0700], GET /templates/247_blue_452/images/modul.jpg HTTP/1.1, 200, 335。这只是一个记录,希望这会有所帮助。我认为我的老师正在寻找这些字段:类别、origcmd、总数、平均的原始日期。使用这些记录:类别 1、GET、300、17.000。接近那个的东西。我希望这能提供更清晰的画面。感谢您的回答。问候
    • 对不起,第一次评论是偶然的,仍然是第一次寻求帮助,仍然试图习惯如何使用它。请看我的第二条评论。对不起,我无法格式化它,所以它看起来更好。问候,
    • @user2380034 您应该首先在原始问题(使用编辑链接)中发布示例数据和所需的输出。但无论如何,请参阅更新的答案。
    • 我会记得下次在原始评论中包含这些字段。感谢您的回复,非常感谢。运行查询时,它指出字段列表中有一个未知列“类别”。我不确定,但我认为 origcmd 需要在 Select 部分中,但是当我这样做时它也会出现其他错误。
    • @user2380034 您确定使用完全相同的查询吗?您看过我在答案中发布的 sqlfiddle 吗?
    猜你喜欢
    • 2021-11-27
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2013-02-26
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多