我有一个特殊的问题。给定三个表。
product - id - title product_rating - product_id - rating product_view - product_id
I want to grab products with a SUM of their ratings (which will either be a +1 or -1 value) and their total product count.
SELECT
p.`id`, p.`title`,
SUM( pr.`rating` ) AS rating,
COUNT( pv.`product_id` ) AS views
FROM
`product` AS p
LEFT JOIN `product_rating` AS pr ON ( pr.`product_id` = p.`id` )
LEFT JOIN `product_view` AS pv ON ( pv.`product_id` = p.`id` )
GROUP BY
p.`id`
ORDER BY rating DESC
在表格中,我有 1 个评分,9 个浏览量。但是,该查询返回 9 个评级和 9 个 View 。我理解为什么会发生这种情况(它是对每个 product_view 的评分求和),但我不知道如何解决这个问题。
如有任何建议,我们将不胜感激。
示例数据:
product ------------ id | title 1 | Globber product_rating ------------------- product_id | rating 1 | 1 product_view ------------ product_id 1 1 1 1 1 1 1 1 1
最佳答案
尝试
SELECT p.id, p.title, r.rating, v.views
FROM product p LEFT JOIN
(
SELECT product_id, SUM(rating) rating
FROM product_rating
GROUP BY product_id
) r ON p.id = r.product_id LEFT JOIN
(
SELECT product_id, COUNT(*) views
FROM product_view
GROUP BY product_id
) v ON p.id = v.product_id
ORDER BY r.rating DESC
示例输出:
| ID | TITLE | RATING | VIEWS | --------------------------------- | 1 | Globber | 1 | 9 |
这是 SQLFiddle 演示
关于MySQL - SUM/COUNT 来自不同表的不同列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17247245/