1
我有兩個表:user
跟蹤用戶信息和users_classes
跟蹤用戶和類之間的關係(類在一個單獨的表)。我想加入這些表並返回用戶的信息以及它們所在的類的數組。有沒有一種有效的方法可以這樣做?使用Postgres聚合函數在每個GROUP BY組中選擇第一行?
表結構:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(255) UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE
)
CREATE TABLE users_classes (
user_id BIGINT REFERENCES users(id),
class_id BIGINT REFERENCES classes(id),
PRIMARY KEY(user_id, class_id)
)
我嘗試:
SELECT
u.id,
FIRST(u.username) AS username,
FIRST(u.email) AS email,
array_agg(c.class_id) AS classes
FROM users_classes AS c
JOIN users AS u
ON c.user_id = u.id
GROUP BY u.id;
我覺得這可能是工作(實施後的第()),但有做它一個更標準的方式?
請提供的樣本數據,你得到的結果和你預期的結果。 – Viki888
你這樣做的方式非常標準。您將列值按其他列聚合到數組中。 –
@VaoTsun雖然他們在wiki上有一個[頁面](https://wiki.postgresql.org/),但我還是很驚訝,本身並沒有內置到Postgres中的FIRST()函數。 wiki/First/last_(aggregate)) – jhhayashi