Доступ к SQL-запросу с помощью JOIN и оператора COUNT, не считая ничего - PullRequest
1 голос
/ 26 марта 2019

У меня есть две таблицы в 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 Ответ

3 голосов
/ 27 марта 2019

Сгруппировав по starType и * PlanetName, счетчик возвращает количество записей в каждой комбинации starType & PlanetName, что, если только у вас нет более одной планетыс тем же именем, вращающимся вокруг вашей звезды, всегда будет одним.

Например, с учетом данных:

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

Группировка по StarType и PlanetNameвыдаст точно такие же данные, поскольку нет повторяющихся комбинаций StarType и PlanetName, которые были бы объединены в группу.

Таким образом, код 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вернет количество записей, связанных с каждым StarType:

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