Mysql 按B列分组计算A列中的不同值
我有一个MySQL表,每一行代表php中的一个curl请求。使用列名(ip、http代码、时间检查) 我现在使用上面的查询只返回过去24小时内所做的记录,但我希望每个唯一IP地址只返回一行,但同时创建两个额外的列,其中任何http_code=200或http_code=0作为增量列 所以我会得到这样的东西Mysql 按B列分组计算A列中的不同值,mysql,pivot,Mysql,Pivot,我有一个MySQL表,每一行代表php中的一个curl请求。使用列名(ip、http代码、时间检查) 我现在使用上面的查询只返回过去24小时内所做的记录,但我希望每个唯一IP地址只返回一行,但同时创建两个额外的列,其中任何http_code=200或http_code=0作为增量列 所以我会得到这样的东西 IP | 200 | 0 | 404 192.168.0.1 | 100 | 5 | 1 192.168.0.2 | 84 | 3 | 0 编辑 在阅读了MySql pi
IP | 200 | 0 | 404
192.168.0.1 | 100 | 5 | 1
192.168.0.2 | 84 | 3 | 0
编辑
在阅读了MySql pivot表之后,我能够创建以下查询来实现我想要做的事情
SELECT ip_address,
SUM(http_code = '200') AS http200,
SUM(http_code = '0') AS http0,
SUM(http_code = '404') AS http404
FROM proxy_stastistics
WHERE time_checked > Unix_timestamp(Now() - interval 24 hour)
GROUP BY ip_address
如果我理解正确,你需要这样的东西:
select ip,
sum(if(http_code=200,1,0)) code200 ,
sum(if(http_code=0,1,0)) code0,
sum(if(http_code=404,1,0)) code404
from proxy_stastistics
where time_checked > UNIX_TIMESTAMP( NOW() - INTERVAL 24 HOUR )
group by ip
你可以在这里看到工作小提琴:
这种转换被称为旋转,在这里已经被询问和回答了很多次。链接重复主题的答案显示了如何在mysql中进行此转换。但是,请注意,在应用程序逻辑中进行此转换可能更有效。感谢您为我指明了正确的方向,我发现该线程非常有用,问题有时是知道要查找什么的术语。再次感谢你,我不知道为什么有人否决了我。代码工作正常。
select ip,
sum(if(http_code=200,1,0)) code200 ,
sum(if(http_code=0,1,0)) code0,
sum(if(http_code=404,1,0)) code404
from proxy_stastistics
where time_checked > UNIX_TIMESTAMP( NOW() - INTERVAL 24 HOUR )
group by ip