PostgreSQL - 从连接表中选择聚合列并使用它来求和
Posted
技术标签:
【中文标题】PostgreSQL - 从连接表中选择聚合列并使用它来求和【英文标题】:PostgreSQL - select aggregated column from joined table and use it to sum 【发布时间】:2021-09-07 15:21:41 【问题描述】:我想选择从三个表中聚合的字段,并为帖子输出三个字段,postId
、calculatedRate
和 count
,我试过但没有用
目前我有这个示例查询只得到count
和postId
select
mr.count,
mr.postId
from
(
select
"m"."postId" as postId,
count("m"."postId") as count
from
"Rating" r
left join "Messenger" m on
"r"."id" = "m"."ratingId"
group by
"m"."postId"
) mr
group by
mr.postId,
mr.count
Messenger(帖子和评级的映射表)
id | postId | ratingId |
---|---|---|
1 | 1 | 4 |
2 | 1 | 5 |
3 | 2 | 6 |
发帖
id | title |
---|---|
1 | post one |
2 | post two |
评分
id | a | b |
---|---|---|
4 | 5.0 | 5.0 |
5 | 3.0 | 3.0 |
6 | 2.0 | 4.0 |
预期结果(calculatedRate = 同一帖子 id 内的平均值((rating.a + rating.b)/ 2))
id | postId | calculatedRate | count |
---|---|---|---|
1 | 1 | 4.0 | 2 |
2 | 2 | 3.0 | 1 |
【问题讨论】:
【参考方案1】:我不确定我是否得到了你要找的东西,但如果你想要每个 MESSENGER.ID
的 COUNT
和 CALCULATEDRATE
,那么下面应该这样做
SELECT
MESSENGER.ID,
POST.ID POSTID,
COUNT(*) NR_RATINGS,
(RATING.A + RATING.B)/2 CALCULATEDRATE
FROM
RATING JOIN MESSENGER ON RATING.ID = MESSENGER.RATINGID
JOIN POST ON MESSENGER.POSTID=POST.ID
编辑:如果您想要平均邮寄,您可以通过以下方式实现这一目标
SELECT
POST.ID POSTID,
COUNT(*) NR_RATINGS,
avg((RATING.A + RATING.B)/2) CALCULATEDRATE
FROM
RATING JOIN MESSENGER ON RATING.ID = MESSENGER.RATINGID
JOIN POST ON MESSENGER.POSTID=POST.ID
GROUP BY POST.ID
【讨论】:
感谢您的快速回复,实际上我希望每个帖子都有count
和calculatedRate
我编辑了原始帖子以添加聚合以上是关于PostgreSQL - 从连接表中选择聚合列并使用它来求和的主要内容,如果未能解决你的问题,请参考以下文章