Группы запросов по внешнему ключу, числовой столбец start_station
:
GROUP BY trips.start_station
но оригинал группируется по названию станции:
GROUP BY stations.station
Это было бы хорошо, если бы существовало однозначное сопоставление между идентификаторами станций и названиями станций. Однако это не так.
Обе пропущенные строки перечислены дважды в базе данных под тем же именем, но с разными идентификаторами станций. Группировка по названию станции дает вам объединенные подсчеты для этих названий.
На самом деле таких станций 5. Вы можете запросить все такие станции, используя GROUP BY
и HAVING
(что позволяет фильтровать по совокупным результатам, например COUNT
, точно так же, как WHERE
позволяет фильтровать по строкам):
SELECT station, COUNT(id)
FROM stations
GROUP BY station
HAVING COUNT(id) > 1
ORDER BY COUNT(id), station
Таким образом, приведенное выше показывает все названия станций, которые появляются по крайней мере дважды, и для набора данных Hubway, который производит:
Andrew Station - Dorchester Ave at Humboldt Pl 2
Boylston at Fairfield 2
Charles Circle - Charles St. at Cambridge St. 2
Dudley Square 2
Mayor Thomas M. Menino - Government Center 2
Мы можем получить количество обратных рейсов для этих 5 станций, когда мы ограничиваем ваш запрос не числом строк, а вместо этого фильтруем дублированные названия станций. Я добавил в идентификатор станции:
Select stations.station, stations.id, Count(*) AS "Count"
FROM trips
INNER JOIN stations
ON stations.id = trips.start_station
WHERE trips.start_station = trips.end_station
AND stations.station in (
SELECT stations.station
FROM stations
GROUP BY stations.station
HAVING COUNT(stations.id) > 1
)
GROUP BY trips.start_station
ORDER BY "Count" DESC
тогда вы получите
Charles Circle - Charles St. at Cambridge St. 60 1410
Charles Circle - Charles St. at Cambridge St. 113 1329
Mayor Thomas M. Menino - Government Center 23 610
Boylston at Fairfield 103 458
Boylston at Fairfield 61 420
Mayor Thomas M. Menino - Government Center 99 380
Dudley Square 56 203
Andrew Station - Dorchester Ave at Humboldt Pl 104 70
Dudley Square 100 57
Andrew Station - Dorchester Ave at Humboldt Pl 85 29
Для станции Charles Circle 1410 + 1329 составляет 2739, но счет только для 1010 * Charles Circle возвратов на станцию, зарегистрированных против stations.id=60
, слишком мал для отображения в ваш топ-5 запросов.
Теперь, , почему база данных имеет несколько идентификаторов для нескольких станций с одинаковым именем, не объясняется и не рассматривается в этой статье. Я не уверен, понял ли автор этой статьи, что это именно тот случай, но такие ошибки встречаются в реальных наборах данных.
Идентификаторы не перекрываются во времени; все 5 станций используют один ID до 2012-09-30, затем 4 станции изменили свой ID для новых поездок на следующий день, 1 октября, но с Andrew Station , очевидно, отключенным на 8 месяцев со следующим новым поездка записана 2013-06-03.