使用 JOIN 访问 SQL 查询和不计算任何内容的 COUNT 语句

Access SQL query with JOIN and a COUNT statement not counting anything

我在 MS Access 中有两个表。一种用于行星,另一种用于其围绕的恒星类型。

我想计算每种恒星类型的行星数量...所以类似于:

+----------+--------------------+
| StarType | PlanetsPerStarType |
+----------+--------------------+
| A        |                  4 |
| B        |                  1 |
| C        |                  7 |
+----------+--------------------+

所以我写了这个 SQL 查询:

SELECT StarType, COUNT(PlanetName) AS PlanetsPerStarType
FROM Planets AS p
LEFT JOIN StarClass AS s ON p.sid = s.sid
GROUP BY starType, PlanetName

但它只是列出了所有行星和所有恒星类型的 1,根本不算数。

我可能做错了什么?

通过 starType PlanetName 分组,计数为 return 每个 [=15] 中的记录数=] & PlanetName 组合,除非你有不止一颗同名行星围绕你的恒星运行,否则它们将永远是一个。

例如,给定数据:

+-----------+------------------+
| StarType  |    PlanetName    |
+-----------+------------------+
| G2V       | Mars             |
| G2V       | Earth            |
| G2V       | Venus            |
| Red Dwarf | Omicron Persei 8 |
| Red Dwarf | Vergon 6         |
+-----------+------------------+

StarType PlanetName 分组将产生完全相同的数据,因为没有重复的 StarTypePlanetName 将合并为一个组的组合。

因此,SQL 代码:

select t.StarType, count(t.PlanetName) as Planets
from YourTable t
group by t.StarType, t.PlanetName

会产生:

+-----------+---------+
| StarType  | Planets |
+-----------+---------+
| G2V       |       1 |
| G2V       |       1 |
| G2V       |       1 |
| Red Dwarf |       1 |
| Red Dwarf |       1 |
+-----------+---------+

因为每个组恰好包含一个条记录。

如果我们仅按 StarType 分组,Count 聚合函数将 return 与每个 StarType:[=26= 关联的记录数]

select t.StarType, count(t.PlanetName) as Planets
from YourTable t
group by t.StarType
+-----------+---------+
| StarType  | Planets |
+-----------+---------+
| G2V       |       3 |
| Red Dwarf |       2 |
+-----------+---------+