Mysql 清点身份证号码

Mysql 清点身份证号码,mysql,sql,Mysql,Sql,我想数一数唯一操作系统的数量 参见我的案例: 表:计算机 +--------------+-------------------+ | name | operatingSystemId | +--------------+-------------------+ |ComputerName01| 1 | +--------------+-------------------+ |ComputerName02| 2 |

我想数一数唯一操作系统的数量

参见我的案例:

表:计算机

+--------------+-------------------+ | name | operatingSystemId | +--------------+-------------------+ |ComputerName01| 1 | +--------------+-------------------+ |ComputerName02| 2 | +--------------+-------------------+ |ComputerName03| 2 | +--------------+-------------------+ |ComputerName04| 2 | +--------------+-------------------+ OperatingSystemId是另一个列出操作系统的表

表:操作系统

+--------------+--------------------------------+ | id | name | +--------------+--------------------------------+ |1 |Microsoft Windows 7 Enterprise | +--------------+--------------------------------+ |2 |Microsoft Windows 8.1 Enterprise| +--------------+--------------------------------+ 我想从computers表中计算唯一操作系统的数量,以获得:

1:1 2:3

Microsoft Windows 7企业版:1 Microsoft Windows 8.1企业版:3

对不起,这个话题已经讨论过很多次了,但我是SQL的新手

我已经试着自己应用我发现的几个例子,但没有成功

我事先感谢你的帮助

杰伊。

做一个左连接

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

您需要一组唯一的操作系统ID

操作系统ID,计数*

11

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

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

如果您从操作系统表中获取ID,您将只返回1,它是操作系统表中的主键。我相信你指的是COUNTc。id@Hituptony还可以看到他的第二个期望结果输出,使用o.id没有任何错误,因为o.id等于operatingSystemId使用一些常识按o.id计算operatingSystemId,因为c.id不存在,然后执行该操作!c、 id确实存在,在join子句中,如何连接不存在的列?我明白你的意思,但你的常识在这里是徒劳的。如果你想用你的SQL小提琴向全世界发送垃圾邮件,你已经做得很好了。你认真对待你的代表!再一次,非常感谢社区对你的帮助,它就像一个魅力。今天我学到了一些东西。