【发布时间】:2020-04-12 14:52:14
【问题描述】:
我看到了一些类似的帖子,要求获得从查询中获得不同结果的建议。这可以通过子查询解决,但我正在聚合的列image_name 是唯一的image_name VARCHAR(40) NOT NULL UNIQUE。我不认为这应该是necerarry。
这是 spot_images 表中的数据
spotdk=# select * from spot_images;
id | user_id | spot_id | image_name
----+---------+---------+--------------------------------------
1 | 1 | 1 | 81198013-e8f8-4baa-aece-6fbda15a0498
2 | 1 | 1 | 21b78e4e-f2e4-4d66-961f-83e5c28d69c5
3 | 1 | 1 | 59834585-8c49-4cdf-95e4-38c437acb3c1
4 | 1 | 1 | 0a42c962-2445-4b3b-97a6-325d344fda4a
(4 rows)
SELECT Round(Avg(ratings.rating), 2) AS rating,
spots.*,
String_agg(spot_images.image_name, ',') AS imageNames
FROM spots
FULL OUTER JOIN ratings
ON ratings.spot_id = spots.id
INNER JOIN spot_images
ON spot_images.spot_id = spots.id
WHERE spots.id = 1
GROUP BY spots.id;
这是图像行的结果:
81198013-e8f8-4baa-aece-6fbda15a0498,
21b78e4e-f2e4-4d66-961f-83e5c28d69c5,
59834585-8c49-4cdf-95e4-38c437acb3c1,
0a42c962-2445-4b3b-97a6-325d344fda4a,
81198013-e8f8-4baa-aece-6fbda15a0498,
21b78e4e-f2e4-4d66-961f-83e5c28d69c5,
59834585-8c49-4cdf-95e4-38c437acb3c1,
0a42c962-2445-4b3b-97a6-325d344fda4a,
81198013-e8f8-4baa-aece-6fbda15a0498,
21b78e4e-f2e4-4d66-961f-83e5c28d69c5,
59834585-8c49-4cdf-95e4-38c437acb3c1,
0a42c962-2445-4b3b-97a6-325d344fda4a
没有换行符,我添加它们是为了可见性。
我应该怎么做才能每次检索一次 image_name?
【问题讨论】:
-
由于 FULL OUTER 连接而返回重复项。如果你只加入了 spot 和 spot_images 那么你就不会得到重复。
-
@forpas 你的意思是独立的
join没有外/内/左/右限定符吗?
标签: sql postgresql join group-by average