我有几个表在我的应用程序中使用。一个维护一个产品列表,另一个维护对这些项目的评论,另一个包含这些项目的星级评分,最后一个购买这些项目。我的表是这个样子:需要查询帮助 - 聚合和多个连接
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