我有幾個表在我的應用程序中使用。一個維護一個產品列表,另一個維護對這些項目的評論,另一個包含這些項目的星級評分,最後一個購買這些項目。我的表是這個樣子:需要查詢幫助 - 聚合和多個連接
tbl_item:
---------
id INT (primary key)
name VARCHAR (product name)
tbl_comment:
------------
id INT (primary key)
item_id INT (foregin key -> tbl_item.id)
commenttext VARCHAR
tbl_rating:
-----------
id INT (primary key)
item_id INT (foreign key -> tbl_item.id)
rating DOUBLE
tbl_purchases:
--------------
id INT (primary key)
item_id INT (foreign key -> tbl_item.id)
我想執行返回下面的查詢:
* The design ID
* The average rating
* The number of comments
* The number of purchases
我有一些與此類似,但它返回不正確的數據:
SELECT d.id ,
COUNT(tbl_purchases.id) AS purchase_count,
COUNT(tbl_comment.id) AS comment_count,
AVG(tbl_rating.rating) AS item_rating,
FROM tbl_item d
LEFT JOIN tbl_purchases ON tbl_purchases.item_id = d.id
LEFT JOIN tbl_comment ON tbl_comment.item_id = d.id
LEFT JOIN tbl_rating ON tbl_rating.id = d.id
GROUP BY d.id;
我發現我的COUNT()列爲兩列返回相同的值,這肯定是不正確的。很明顯,我在我的連接或GROUP BY中做錯了事,但我不完全確定是什麼。我是一個Java人,而不是一個SQL人,所以我不確定這個SELECT語句出了什麼問題。
任何人都可以幫我構建這個查詢嗎?有沒有辦法通過這種方式跨多個不同的表執行這個聚合查詢?謝謝!!
計數將返回相同,因爲它計數最終結果集(它不關心它是否爲空)。如果你想每桌單獨計數,我建議看看子查詢。 – Limey
您也可以設置變量,然後用case語句手動跟蹤每個表的總計。 – Limey
你能給我一個例子,說明如何用子查詢來完成這個任務嗎?就像我說的,我是一個Java人,並且對SQL沒有太多的經驗。 – Shadowman