[英]PostgreSQL - select aggregated column from joined table and use it to sum
我想選擇從三個表聚合的字段並為 post、 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 | 郵編 | 評級ID |
---|---|---|
1 | 1 | 4 |
2 | 1 | 5 |
3 | 2 | 6 |
郵政
ID | 標題 |
---|---|
1 | 一貼 |
2 | 貼二 |
評分
ID | 一種 | 乙 |
---|---|---|
4 | 5.0 | 5.0 |
5 | 3.0 | 3.0 |
6 | 2.0 | 4.0 |
預期結果(calculatedRate = 同一帖子 id 內的平均值((rating.a + rating.b)/2))
ID | 郵編 | 計算率 | 數數 |
---|---|---|---|
1 | 1 | 4.0 | 2 |
2 | 2 | 3.0 | 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.