按b列分组计算a列中的不同值

jhkqcmku  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(338)

这个问题在这里已经有答案了

如何在mysql中返回pivot表输出(9个答案)
两年前关门了。
我有一个mysql表,每一行代表一个在php中发出的curl请求。使用列名(ip、http代码、时间\u检查)

SELECT * 
FROM proxy_stastistics 
WHERE time_checked > UNIX_TIMESTAMP( NOW() - INTERVAL 24 HOUR )

我现在使用上面的查询只返回过去24小时内的记录,但是我只想每个唯一的ip地址返回一行,但是同时创建了两个额外的列,其中任何http\u code=200或http\u code=0作为增量列。
所以我会得到这样的东西

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
zc0qhyus

zc0qhyus1#

如果我理解正确,你需要这样的东西:

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

你可以在这里看到工作小提琴:
http://sqlfiddle.com/#!9/35df03/8号

相关问题