我是一名移动开发人员,但是最近我一直在做一些服务器工作,所以请原谅我的术语,等等。我一直在研究SQLite之间的区别(??)。在iOS / Android上使用)和PostgreSQL(我在API中使用)。
在SQLite中,我可以从表中SELECT *
,然后GROUP BY
单个列,而根本没有任何聚合函数。但是,在PostgreSQL中,它总是抱怨它需要group by中的列或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子句或聚合函数。当我这样做时,我从数据库中获得的信息是无用的(在Rails中,它只是一堆空对象:#<StopTime >
)。
如何使用Postgres实现与上述相同的功能?
答案 0 :(得分:1)
您需要将列列表与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 (?, ?, ?)