Я работаю над geolife
набором данных . Это GPS
набор данных о траектории почти 25 миллионов GPS
точек пользователей. Итак, я создал две таблицы (фактически воспроизведенные из здесь) : plt_distinct
, содержащие точки GPS пользователей (более 24 миллионов строк), и labels
таблицу, содержащую режим передвижения, используемый участниками (14 718 строк).
CREATE TABLE `plt_distinct` (
`directory` varchar(10) NOT NULL DEFAULT '',
`latitude` double NOT NULL DEFAULT '0',
`longitude` double NOT NULL DEFAULT '0',
`flag` int(11) DEFAULT NULL,
`altitude` double NOT NULL DEFAULT '0',
`passeddate` varchar(255) DEFAULT NULL,
`gpsdate` date NOT NULL DEFAULT '0000-00-00',
`gpstime` time NOT NULL DEFAULT '00:00:00',
`gpsdatetime` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`directory`,`latitude`,`longitude`,`gpsdate`,`gpstime`,`altitude`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `labels` (
`directory` varchar(10) NOT NULL DEFAULT '',
`starttime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`endtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`transportationmode` varchar(10) NOT NULL DEFAULT '',
PRIMARY KEY (`directory`,`starttime`,`endtime`,`transportationmode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Я собираюсь провести некоторый исследовательский анализ (например, GPS
частота дискретизации для каждого режима перемещения и c ..). Существует около десяти различных режимов движения для пользователей, как указано в labels
.
Итак, для начала я хочу подсчитать количество точек GPS для каждого режима движения, поэтому я пишу:
SELECT COUNT(*)
FROM labels JOIN plt_distinct
USING (directory)
WHERE transportationmode='bus';
+------------+
| COUNT(*) |
+------------+
| 1881761963 |
+------------+
1 row in set (7 min 13.83 sec)
Этот запрос возвращает более 188 миллионов отсчетов, это более МИЛЛИАРДА, явно примерно в 80 раз больше доступных точек GPS в целом. Я знаю, что делаю что-то неправильно (не считая отдельных точек для режима шины), но я не уверен, как достичь своей цели.
Как MWE по моей проблеме (иллюстрируя, что я имею в виду), я создал db-fiddle здесь только с 5 строками из этих tables
(и только 2 bus
в режиме перемещения), но мой запрос возвращает количество десять.
Как я могу правильно подсчитать количество очков для каждого режима передвижения?