MySQL-对不同表中的不同列求和/计数
我有一个特殊的问题。给我三张桌子 product - id - title product_rating - product_id - rating product_view - product_id 在表中,我有1个评级,9个视图。但是,查询返回9个评级,9个视图。我理解为什么会发生这种情况(它是对每个产品视图的评级的总和),但我不知道如何避开它 如有任何建议,将不胜感激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 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
查询吗?