mysql sum join 多表统计求和时不正确的问题

但是我们发现,这个数据是错误的

于是我想到了用 distinct  但是发现用不了

于是又想到 group by

出来的结果是下面这样的


发现统计只是分组统计,没达到所有行统计,而且统计的数据不正确


于是我写了下面的语句来查看结果,加多了一个count函数查看

    SELECT s.oid,p.oid  AS poid,  SUM( priceCount) AS count_price, COUNT(p.oid) FROM mobile_shops_orders AS s
    LEFT JOIN mobile_shops_products AS p ON p.oid = s.oid
    WHERE s.userid =  '2'
    GROUP BY poid

出来的结果是下面的,一看就知道是什么原因了
 
oid     poid     count_price     COUNT(p.oid)
2015031809153611521     2015031809153611521     664.00     2
2015031809155386138     2015031809155386138     40.00     1

最后我们的语句应该是下面这个的,join 后面这个是重点,意思是返回不重复的数据

SELECT s.oid, p.oid AS poid, SUM(priceCount) AS count_price

FROM mobile_shops_orders AS s

LEFT JOIN  (select distinct  oid from  mobile_shops_products)   AS  p ON p.oid = s.oid WHERE s.userid =  '2’


oid     poid     count_price
2015031809153611521     2015031809153611521     372.00


这里有几个要注意的问题,一是,group by 是用于分组统计,如果要所有行统计不能用他

二需要使用子句先排除重复行,否则也会出得统计不正确的问题

还有,看网上说 返回 null 时sum等统计函数是不正确的

猜你喜欢

转载自blog.csdn.net/qq_34412985/article/details/84841606