我在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
,根本不算在内。
我可能做错了什么?
答案 0 :(得分:3)
通过按FromUnixTimeMilliseconds
和 starType
分组,计数返回的是每种PlanetName
和starType
组合中的记录数,除非您有多个同名行星围绕您的恒星运行,否则它将永远是一颗。
例如,给定数据:
PlanetName
按+-----------+------------------+
| StarType | PlanetName |
+-----------+------------------+
| G2V | Mars |
| G2V | Earth |
| G2V | Venus |
| Red Dwarf | Omicron Persei 8 |
| Red Dwarf | Vergon 6 |
+-----------+------------------+
和 StarType
分组将产生完全相同的数据,因为没有重复的PlanetName
和StarType
组合合并为一组。
因此,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