计数ID号码

时间:2013-12-13 15:07:21

标签: mysql sql

我想计算唯一的operatingSystemIds数量

看我的案子:

表:计算机


+--------------+-------------------+
| name         | operatingSystemId |
+--------------+-------------------+
|ComputerName01|    1              |
+--------------+-------------------+
|ComputerName02|    2              |
+--------------+-------------------+
|ComputerName03|    2              |
+--------------+-------------------+
|ComputerName04|    2              |
+--------------+-------------------+

OperatingSystemId是指另一个列出操作系统的表

表:操作系统

+--------------+--------------------------------+
| id           | name                           |
+--------------+--------------------------------+
|1             |Microsoft Windows 7 Enterprise  |
+--------------+--------------------------------+
|2             |Microsoft Windows 8.1 Enterprise|
+--------------+--------------------------------+

我想从计算机表中计算,获取唯一的operatingSystemIds的数量:

1:1
2:3

Microsoft Windows 7 Enterprise:1
Microsoft Windows 8.1 Enterprise:3

很抱歉,这个话题肯定已被多次处理过,但我是SQL的新手。

我已经尝试过应用我发现的几个例子,但没有任何成功。

我事先感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

您需要具有唯一操作系统ID的数量。

操作系统ID,计数(*)

1 1

2 3

你需要加入什么?这都可以在计算机表中完成。

SELECT OperatingSystemID, count(*) from computers group by 1
  

OperatingSystemId是指列出操作的另一个表   系统

是的,但由于此表上的ID是主键,因此这些值是唯一的。无需参考此表。只要您知道每个ID与该表中的相应名称相关联。但是,如果您确实要在此查询中包含该名称...

SELECT a.OperatingSystemID, b.Name, count(a.OperatingSystemID) from computers a
inner join operatingsystem b
ON a.OperatingSystemID = b.ID

在这里,您只使用内部联接从操作系统表中提取名称,而不是其他内容。我不认为这会解释你的结果,但我可能是错的。

答案 1 :(得分:-1)

左转加入

SELECT o.`name` , COUNT(o.id) `count`  FROM 
computers c
LEFT JOIN operatingsystems o ON (c.operatingSystemId  =o.id)
GROUP BY o.id

See Working Fiddle Here