2013-05-09 43 views
1

我的表WebLog有retcode,ipno,orgdate和zone。mysql catorgorize和when和else

我正在尝试使用when和else语句来对retcode的每个数值在retcode字段中进行分类,并将所有的NULL归入ELSE类别。

然后,对于这些类别中的每个类别,计数每个组中的记录数并平均字节数。

到目前为止,我已经想出了这个,但我得到的是在编码列中分组的空值。

有人可以指出我在正确的方向。

SELECT CASE retcode 
WHEN retcode = ipno THEN "ret" 
ELSE NULL END AS retcode 
FROM WebLog 
GROUP BY ipno LIMIT 10; 
+0

比较非聚集的列('retcode')聚集的列('ipno' )没有意义,因为很多值都是sh是一个ipno,MySQL如何知道要选择哪个'retcode'? (答案 - 它随机选择) – Patashu 2013-05-09 04:27:08

回答

1
尝试

其更改为

SELECT CASE 
WHEN retcode = ipno THEN "ret" 
ELSE NULL END AS retcode 
FROM WebLog 
GROUP BY ipno LIMIT 10; 

SELECT CASE retcode 
WHEN ipno THEN "ret" 
ELSE NULL END AS retcode 
FROM WebLog 
GROUP BY ipno LIMIT 10; 

12.4. Control Flow Functions

CASE value 
    WHEN [compare_value] 
    THEN result 
    [WHEN [compare_value] THEN result ...] 
    [ELSE result] 
END 

CASE 
    WHEN [condition] 
    THEN result 
    [WHEN [condition] THEN result ...] 
    [ELSE result] 
END 
+0

我得到了同样的结果,但生病继续这在早上当我去工作感谢您的帮助它的真正appriciated – user2359709 2013-05-09 05:15:23

+0

这里是我得到,但即时消息告诉我需要IF语句为我的retcode列但当我尝试时,我不断收到错误。这里是我现在选择RETCODE,ipno,COUNT(*)AS Num_Of_Ip, SUM(IF(RETCODE = 404,1,0))AS 'IP_ADDY' 从网络日志 GROUP BY ipno ORDER BY RETCODE DESC LIMIT 10 ; END – user2359709 2013-05-10 20:03:54