Эквивалентный запрос PostgreSQL из SQLite - PullRequest
0 голосов
/ 28 октября 2018

Я разработчик для мобильных устройств, но в последнее время я выполняю некоторые серверные работы, поэтому, пожалуйста, извините мою терминологию и т. Д. Я столкнулся с тем, что может (??) быть различием между SQLite (то, что яиспользовать на iOS / Android) и PostgreSQL (который я использую в API).

В SQLite я мог бы SELECT * из таблицы, а затем GROUP BY один столбец без каких-либо агрегатных функций.Однако в PostgreSQL он продолжает жаловаться, что ему нужны столбцы в группе или функция agg.

Предположим, у меня есть таблица stop_times, в которой есть следующие столбцы: stop_id, trip_id, stop_sequence и departure_time.Моя таблица trips имеет столбец trip_id и route_id.В SQLite у меня есть запрос, который выглядит следующим образом:

SELECT * FROM "stop_times" 
  INNER JOIN "trips" ON "stop_times"."trip_id" = "trips"."trip_id" 
  WHERE "stop_times"."stop_id" IN (?, ?, ?) 
  GROUP BY "stop_times"."stop_id", "trips"."route_id"

(я пытаюсь определить stop_sequence определенного набора остановок вдоль любых маршрутов, которые останавливаются на них.) В PostgreSQLоднако, это, похоже, не работает, так как жалуется, пока я не помещу каждый столбец stop_times в предложение group by или в агрегатную функцию.Когда я это делаю, то, что я получаю от db, бесполезно (в Rails это просто куча пустых объектов: #<StopTime >).

Как мне добиться того же, что и выше, но с Postgres?

1 Ответ

0 голосов
/ 28 октября 2018

Вам необходимо сопоставить список столбцов с GROUP BY:

SELECT "stop_times"."stop_id", "trips"."route_id" 
FROM "stop_times" 
INNER JOIN "trips" ON "stop_times"."trip_id" = "trips"."trip_id" 
WHERE "stop_times"."stop_id" IN (?, ?, ?) 
GROUP BY "stop_times"."stop_id", "trips"."route_id"

или distinct on:

SELECT DISTINCT ON("stop_times"."stop_id", "trips"."route_id") *
FROM "stop_times" 
INNER JOIN "trips" ON "stop_times"."trip_id" = "trips"."trip_id" 
WHERE "stop_times"."stop_id" IN (?, ?, ?) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...