我正在处理2列,其中一列应该是唯一的,但有要删除的重复项,而一列需要计数重复项。我终于找到了方程式的后半部分,但是我仍然需要弄清楚如何从第一列中删除重复项。
SELECT map.newvalue as 'Model of Phone', Count(*) as 'Number of Phones'
FROM items i, hosts h, history_uint huint, mappings map
WHERE h.hostid=i.hostid AND h.name='$Hosts' AND i.itemid=huint.itemid AND i.valuemapid=map.valuemapid AND huint.value=map.value AND i.name LIKE '%Model of the Phone'
GROUP BY map.newvalue
ORDER BY 'Item Name' DESC
LIMIT 100;
我从中获取重复值的table.column是i.name
。抱歉,如果我的查询看起来很糟糕,我只是一个IT人士,她假装知道SQL。谢谢您的协助!
以防其他人在以后的生活中看到这种情况,我正在通过SNMP和Zabbix从Call Manager收集电话模型,并在Grafana中显示它。
答案 0 :(得分:-1)
您不能在where子句中使用distinct,但可以将group by用于多列尝试
SELECT map.newvalue as 'Model of Phone', Count(*) as 'Number of Phones'
FROM items i, hosts h, history_uint huint, mappings map
WHERE h.hostid=i.hostid AND h.name='$Hosts' AND i.itemid=huint.itemid AND i.valuemapid=map.valuemapid AND huint.value=map.value AND i.name LIKE '%Model of the Phone'
GROUP BY map.newvalue, i.name
ORDER BY 'Item Name' DESC
LIMIT 100;
由于在group by中添加了额外的文件,它会稍微改变您的结果,但是它将为您提供唯一的名称和newvalue结果。
希望这会对您有所帮助。