MySQL-对不同表中的不同列求和/计数

MySQL-对不同表中的不同列求和/计数,mysql,left-join,aggregate-functions,Mysql,Left Join,Aggregate Functions,我有一个特殊的问题。给我三张桌子 product - id - title product_rating - product_id - rating product_view - product_id 在表中,我有1个评级,9个视图。但是,查询返回9个评级,9个视图。我理解为什么会发生这种情况(它是对每个产品视图的评级的总和),但我不知道如何避开它 如有任何建议,将不胜感激 样本数据: product ------------ id | title 1 | Globb

我有一个特殊的问题。给我三张桌子

product - id - title product_rating - product_id - rating product_view - product_id 在表中,我有1个评级,9个视图。但是,查询返回9个评级,9个视图。我理解为什么会发生这种情况(它是对每个产品视图的评级的总和),但我不知道如何避开它

如有任何建议,将不胜感激


样本数据:

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 产品 ------------ id |标题 1 | Globber 产品评级 ------------------- 产品|标识|评级 1 | 1 产品视图 ------------ 产品标识 1. 1. 1. 1. 1. 1. 1. 1. 1. 试一试

样本输出:

| ID | TITLE | RATING | VIEWS | --------------------------------- | 1 | Globber | 1 | 9 | |ID |标题|评级|视图| --------------------------------- |1 | Globber | 1 | 9| 这里是演示

试试看

样本输出:

| ID | TITLE | RATING | VIEWS | --------------------------------- | 1 | Globber | 1 | 9 | |ID |标题|评级|视图| --------------------------------- |1 | Globber | 1 | 9| 下面是演示

如何做到这一点

SELECT tbl.pid,tbl.ptitle, SUM(tbl.rating) as Rate, COUNT (tbl.views) as ViewList FROM (SELECT 
p.`id` as pid, p.`title` as ptitle,
pr.`rating` AS rating, 
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` ) ) as tbl
GROUP BY 
tbl.`pid`
ORDER BY tbl.Rate DESC
怎么做

SELECT tbl.pid,tbl.ptitle, SUM(tbl.rating) as Rate, COUNT (tbl.views) as ViewList FROM (SELECT 
p.`id` as pid, p.`title` as ptitle,
pr.`rating` AS rating, 
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` ) ) as tbl
GROUP BY 
tbl.`pid`
ORDER BY tbl.Rate DESC

非常感谢。工作非常完美——这也是SQLFiddle的介绍@凯瑞:非常感谢你,这次跑得很完美。“但我们叫什么名字?”哈米森,我不明白你的问题?每个括号后的字母是表的别名。在括号中,查询称为子查询,我们创建子查询的别名?@Kerry你知道如何将此
SQL
查询转换为
HQL
查询吗?谢谢!工作非常完美——这也是SQLFiddle的介绍@凯瑞:非常感谢你,这次跑得很完美。“但我们叫什么名字?”哈米森,我不明白你的问题?每个括号后的字母是表的别名。在括号中,查询称为子查询,我们创建子查询的别名?@Kerry你知道如何将此
SQL
查询转换为
HQL
查询吗?