我正在使用SQL EXPRESS 2008。
我有一个表,可跟踪用户正在使用的所有操作系统。我想准确了解每个操作系统使用了多少用户。问题在于表中还有其他条目,因此每当更新这些条目时,它都会添加具有该用户的OS和ID的另一个条目。因此,如果我仅搜索1个用户,则返回的计数为66,但这不应该为1。如何通过唯一ID为每个操作系统返回计数值? [MAC Address ID]
是用户的唯一ID,但是可以有许多具有该用户ID的条目。
我尝试了以下队列:
USE db1
SELECT Windows.[Windows Version], COUNT(Topology.[MAC Address ID])
FROM Topology
JOIN Windows ON Windows.[Windows Version ID] = Topology.[Windows Version ID]
WHERE Topology.[MAC Address ID] IN (28, 154)
GROUP BY Windows.[Windows Version], Topology.[MAC Address ID]
它返回
这是不对的,我的where子句仅搜索2个用户,因此我的总数应为2,而不是72。第1行应为1,第2行应为1。(理想情况是删除了我应该在where子句中查看使用每个操作系统的用户数。
这是我的拓扑表的样子:
基本上,我想删除WHERE子句,仅能绘制使用每个操作系统的用户数。
答案 0 :(得分:0)
您可以使用子查询来简化拓扑表,并获得仅包含感兴趣信息的独特结果:
USE db1
SELECT Windows.[Windows_Version], COUNT(simplifiedTopology.[MAC_Address _ID])
FROM ( SELECT DISTINCT [MAC_Address_ID], [Windows_Version_ID] FROM Topology ) simplifiedTopology
JOIN Windows ON Windows.[Windows_Version_ID] = simplifiedTopology.[Windows_Version_ID]
WHERE simplifiedTopology.[MAC_Address_ID] IN (28, 154)
GROUP BY Windows.[Windows_Version], Topology.[MAC_Address_ID]
答案 1 :(得分:0)
在计数汇总函数中添加“与众不同”,在Windows上只需group by
。[Windows版本]:
SELECT Windows.[Windows Version], COUNT(distinct Topology.[MAC Address ID])
FROM Topology
JOIN Windows ON Windows.[Windows Version ID] = Topology.[Windows Version ID]
WHERE Topology.[MAC Address ID] IN (28, 154)
GROUP BY Windows.[Windows Version]