Вычисление медианы всех пользователей во всех поездках - PullRequest
0 голосов
/ 19 февраля 2020

У меня грязная рука на наборе данных о траектории GPS. Этот набор данных состоит из последовательности точек GPS для пользователей до продолжительности поездки:

SELECT * FROM gps_track;
+---------+------------------+------------------+
| user_id |       lat        |       lon        |
+---------+------------------+------------------+
| 1       | 39.984702        | 116.318417       |
| 1       | 39.984683        | 116.31845        |
| 1       | 39.984611        | 116.318026       |
| .       | .                | .                |
| 2       | 26.162202        | 119.943787       |
| 2       | 26.161528        | 119.943234       |
| 2       | 26.1619          | 119.943228       |
| .       | .                | .                |
| 3       | 22.8143366666667 | 108.332281666667 |
| 3       | 22.81429         | 108.332256666667 |
| 3       | 22.81432         | 108.332258333333 |
| .       | .                | .                |
| 4       | 32.9239666666667 | 117.386683333333 |
| 4       | 32.9235166666667 | 117.386616666667 |
| 4       | 32.9232833333333 | 117.386683333333 |
| .       | .                | .                |
+---------+------------------+------------------+

Я могу получить COUNT точек GPS для каждой user_id 1, 2,3,.. et c.

SELECT distinct user_id
    , COUNT(lat) AS lat_count
FROM gps_track
GROUP BY user_id

Как мне получить медиану количества точек GPS во всех поездках? Не средняя точка для каждого пользователя. Вот скрипка для точек выборки из моего набора данных.

1 Ответ

1 голос
/ 19 февраля 2020

Может быть:

SELECT percentile_disc(0.5) WITHIN GROUP (ORDER BY lat_count)
FROM (SELECT user_id
    , COUNT(lat) AS lat_count
FROM gps_track
GROUP BY user_id) du;
...