Я пытаюсь написать запрос SQL или ActiveRecord, чтобы ответить на этот вопрос: «Из людей, которые прошли хотя бы одну поездку, каково среднее число линий метро, из которых они отбыли?»
Схема выглядит следующим образом:
- Поездка: Поездка из одного места в другое.
user_id
для пользователя, location_id
для местоположения. - Местоположение: Местоположение - это остановка вдоль линии.Местоположение имеет
line_id
, указывающее, на какой линии оно находится.Местоположение принадлежит одной линии. - Линия: Линия представляет собой серию связанных остановок метро, ее местоположений.
- Пользователь: Человеккоторый совершил поездку.
Похоже, мне нужно сделать две вещи:
- Учитывая, что Поездки соединены с их местоположениями, подсчитайте количество различных комбинаций
[rides.user_id, locations.line_id]
. - Разделите это число на количество пользователей, совершивших хотя бы одну поездку.
Результатом будет среднее значение и, следовательно, ответ на вопрос.
- Это звучит правильно?
- Если так, как лучше это сделать?
Я использую Rails, так что если я могувыразить это в синтаксисе ARel или AR, не обращаясь к SQL, это было бы здорово.Но я возьму то, что смогу получить.
Комментатор попросил привести пример.Давайте представим, что данные выглядят примерно так:
rides locations
====================== =====================
user_id location_id location_id line_id
1 1 1 1
1 1 2 1
1 1 3 2
1 1 4 3
2 1 5 4
2 2 6 5
2 3
3 3
3 4
3 5
3 6
Мы видим, что пользователь 1 совершил 4 поездки, пользователь 2 - 3 поездки, а пользователь 3 - 4 поездки.Эти поездки были в [1, 3, 4]
различных местах , но только [1, 2, 4]
различных линий .Таким образом, среднее число строк, на которое проехался данный пользователь, составило (1 + 2 + 4) / 3
или 2.33...
.