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

时间:2019-03-26 17:04:46

标签: sql ms-access ms-access-2013

我在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,根本不算在内。

我可能做错了什么?

1 个答案:

答案 0 :(得分:3)

通过按FromUnixTimeMilliseconds starType分组,计数返回的是每种PlanetNamestarType组合中的记录数,除非您有多个同名行星围绕您的恒星运行,否则它将永远是一颗。

例如,给定数据:

PlanetName

+-----------+------------------+ | StarType | PlanetName | +-----------+------------------+ | G2V | Mars | | G2V | Earth | | G2V | Venus | | Red Dwarf | Omicron Persei 8 | | Red Dwarf | Vergon 6 | +-----------+------------------+ StarType分组将产生完全相同的数据,因为没有重复的PlanetNameStarType组合合并为一组。

因此,SQL代码:

PlanetName

将产生产量:

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关联的记录数:

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