[英]SQL Sum sub-query with joined tables?
我有一個論壇站點,其中包含帖子(gems)和文件附件(gemdetail)以及對帖子的回復(gems),並且回復中還可以包含文件附件(gemdetail)。 由於帖子和回復都存儲在同一表中,因此可以進行有趣的左聯接,該聯接選擇具有關聯的回復和詳細信息的所有帖子。
我想向混合(評分)添加另一個表,該表允許用戶對每個帖子進行評分。 然后,我希望能夠在同一查詢中獲得每個帖子的總評分。 如何將sum(rating)相加,以便輸出的每一行都有gemid的總和。 我知道我需要一個總和子查詢(帶有臨時結果集的派生表),類似於此處找到的子查詢,但它超出了我的技能范圍。 提前致謝。
表結構如下
table: gems
gemid title replygemid
----- ----- ----------
220 map NULL
223 inhabitants NULL
403 reply to map 220
table: gemdetail
gemid filename
------ --------
220 uganda-map.jpg
220 mozambique-map.jpg
223 uganda-inhabitants.jpg
223 kenya-inhabitants.jpg
403 mona-lisa-x8.jpg
table: rating (to be added)
gemid rating
----- -------
220 1
220 5
223 3
403 -1
我當前的(簡體)查詢
SELECT g.gemid as ggemid, g.title as gtitle, gemdetail.filename as gfilename, r.filename as rfilename
FROM (SELECT gems.* FROM gems ) g
LEFT JOIN
(SELECT title, x.gemid, x.replygemid, x.userid, y.filename from gems x
LEFT JOIN gemdetail y ON x.gemid = y.gemid ) r ON g.gemid = r.replygemid
LEFT JOIN gemdetail ON g.gemid = gemdetail.gemid
結果可能如下所示
ggemid replygemid gtitle gfilename rfilename
------ ---------- ------ --------------------- ----------------
220 403 Map uganda-map.jpg mona-lisa-x8.jpg
220 403 Map mozambique-map.jpg mona-lisa-x8.jpg
223 NULL Inhabitants uganda-inhabitants.jpg NULL
223 NULL Inhabitants kenya-inhabitants.jpg NULL
223 NULL Inhabitants kenya-inhabitants.jpg NULL
我認為這是您想要的:
SELECT g.gemid as ggemid, g.title as gtitle, gemdetail.filename as gfilename, r.filename as rfilename, rt.sum_rating
FROM (SELECT gems.* FROM gems ) g
LEFT JOIN
(SELECT title, x.gemid, x.replygemid, x.userid, y.filename from gems x
LEFT JOIN gemdetail y ON x.gemid = y.gemid ) r ON g.gemid = r.replygemid
LEFT JOIN gemdetail ON g.gemid = gemdetail.gemid
LEFT JOIN (SELECT gemid, SUM(rating) as sum_rating from rating GROUP BY gemid) rt ON g.gemid = rt.gemid
查詢 :
SELECT g.gemid as ggemid, g2.gemid as replygemid,
g.title as gtitle, gd.filename as gfilename,
gd2.filename as rfilename, SUM(rating) as rating
FROM gems g
INNER JOIN gemdetail gd ON g.gemid = gd.gemid
INNER JOIN rating r ON g.gemid = r.gemid
LEFT OUTER JOIN gems g2 ON g.gemid = g2.replygemid
LEFT OUTER JOIN gemdetail gd2 ON g2.gemid = gd2.gemid
GROUP BY g.gemid, g2.gemid, g.title,
gd.filename, gd2.filename
結果 :
| GGEMID | REPLYGEMID | GTITLE | GFILENAME | RFILENAME | RATING |
|--------|------------|--------------|------------------------|------------------|--------|
| 220 | 403 | map | mozambique-map.jpg | mona-lisa-x8.jpg | 6 |
| 220 | 403 | map | uganda-map.jpg | mona-lisa-x8.jpg | 6 |
| 223 | (null) | inhabitants | kenya-inhabitants.jpg | (null) | 3 |
| 223 | (null) | inhabitants | uganda-inhabitants.jpg | (null) | 3 |
| 403 | (null) | reply to map | mona-lisa-x8.jpg | (null) | -1 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.