mysql - 带有 LIKE 和子字符串的 When 语句

标签 mysql substring sql-like case-when

我在学校,正在尝试解决老师提出的这个问题。我没有询问教练,因为他通常会在两周后回复我。

以下是问题的内容:

使用数据库中的博客表创建一个查询,该查询将使用 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,但希望在这里得到一些可能有帮助的指导。

问候,

最佳答案

更新:

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

关于mysql - 带有 LIKE 和子字符串的 When 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16534770/

相关文章:

mysql - 如何更新 MySQL SET 值,其中某些列内容类似于另一个表列内容

mysql - SQL使用like运算符在多个字段上查找相同的值

mysql - 不能只显示多个交易的最大日期

mysql - 将两个表中的两列合并为一个

javascript - 如何只更新 php/mysql 生成的表的一列而不重新加载页面/表?

mysql - 如何加快 SELECT .. LIKE 在 MySQL 中对多列的查询?

mysql - DBIx::针对 mysql 日期时间函数的类测试

swift - 如何删除 Swift 4 中字符串的最后一个字符?

Python numpy where 函数行为

excel - 使用公式,从变量字符串中提取操作系统版本号