我在学校并试图找出教师提出的问题。我没有问过导师,因为他通常会在两周后回到我身边。
以下是问题:
使用数据库中的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,但希望在这里有一些方向可能有所帮助。
此致
答案 0 :(得分: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 强>