如何在mySQL表中计算10个不同的IP

时间:2018-05-09 14:32:28

标签: mysql count

我对mySQL比较陌生。我正在尝试计算我的表中每个ip的所有出现次数,但我不确定如何将查询分别对我进行分组。这是我到目前为止的表格和我的表格的一个例子。

TableData:
MAC                 IP       Status
AAAA.AAAA.AAAA  xx.xxx.xx.78   6
AAAA.AAAA.AACA  xx.xxx.xx.131  1
AAAA.AAAA.AABA  xx.xxx.xx.31   5
AAAA.AAAA.AAAD  xx.xxx.xx.31   NULL
AAAA.AAAA.AAAC  xx.xxx.xx.78   1
AAAA.AAAA.AAAB  xx.xxx.xx.131  6
AAAA.AAAA.AAAF  xx.xxx.xx.31   6
AAAA.AAAA.AABB  xx.xxx.xx.131  5
AAAA.AAAA.AABB  xx.xxx.xx.131  6

SELECT COUNT(IP='xx.xxx.xx.31') COUNT(IP='xx.xxx.xx.131'), COUNT(IP='xx.xxx.xx.78') TABLEDATA WHERE Status IS NOT NULL

Result wanted:
xx.xxx.xx.31   2
xx.xxx.xx.78   2
xx.xxx.xx.131  4

我看着count rows specific value,但这似乎有所不同,我在应用这个原则时遇到了麻烦,如果那就是我需要的东西。我很难想到要在互联网上搜索什么。

已更新 - 在结果和表格数据中显示给定IP的重复MAC。

2 个答案:

答案 0 :(得分:3)

您想使用GROUP BY

SELECT
    MAC,
    IP,
    COUNT(IP)
FROM
    TABLEDATA
WHERE
    Status IS NOT NULL
GROUP BY
    MAC,
    IP

答案 1 :(得分:1)

我认为这必须适合你。这将显示您几乎完全想要的结果,IP将仅显示最后的数字,而不是像xx.xxx.xx.10。如果需要,您可以编辑它。在订单行中转换为无符号函数是将最后一个数字排序为整数。

SELECT substring_index(ip, '.', -1), count(ip) 
FROM TableData
WHERE Status is not null 
GROUP BY substring_index(ip, '.', -1), status 
ORDER BY cast(substring_index(ip, '.', -1) as UNSIGNED);