我对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。
答案 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);