我是 SQL 新手,我已經為這個例子苦苦掙扎了很長一段時間。
我有這張桌子:

所以,我的要求是統計每個成員提出的建議數量。按推薦數量排序。最終結果應如下所示:

我真的很困惑,因為 column 的值recommendedby實際上是id成員的值。我不知道如何將它們“識別”為id而不僅僅是一些值,計算每個成員有多少建議并將它們“連接”到memid列以獲得所需的結果。
到目前為止,我設法做到了:
SELECT COUNT(recommendedby)
FROM members
GROUP BY recommendedby
但我現在被困住了。我得到了每個推薦的計數id,但它與實際無關id。這是我的結果。

uj5u.com熱心網友回復:
我想這就是你要找的:
select "id"
, (select count(1)
from "members"
where "recommendedby" = m."id")
from "members" m
盡管使用子查詢不是很流行并且可能會導致嚴重的性能問題,但恕我直言,這是了解您正在做什么的最簡單方法。
uj5u.com熱心網友回復:
您應該為此使用自聯接:
SELECT m.id,
count(r.id) AS recommendations
FROM members AS m
LEFT JOIN members AS r
ON r.recommendedby = m.id
GROUP BY m.id
ORDER BY recommendations;
r.id對于沒有推薦的成員,左連接將為NULL,并且count不會計算此類 NULL 值。
uj5u.com熱心網友回復:
您可以使用兩種方法。
- 加入 分組
這非常簡單,您需要做的就是將您所做的查詢作為 SubQuery 并加入您的表。
SELECT members.*, rec.recommendations
FROM members
LEFT JOIN (
SELECT COUNT(recommendedby) recommendations, recommendedby
FROM members
GROUP BY recommendedby
) rec ON rec.recommendedby = members.id
- 側
SELECT m1.*, rec.recommendations
FROM members m1,
LATERAL (
SELECT COUNT(recommendedby) recommendations
FROM members m2
WHERE m1.id = m2.id
)
希望這能有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/517007.html
