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


于是我写了下面的语句来查看结果,加多了一个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等统计函数是不正确的

想要计算一段文本的hash摘要(md5和sha256) bob@ubuntu:~$ echo 123456 | md5 sum f447b20a7fcbf53a5d5be013ea0b15af - bob@ubuntu:~$ echo 123456 | sha sum -a 256 e150a1ec81e8e93e1eae2c3a77e66ec6dbd6a3b460f89c1d08aecf422ee401a0 - bob@ubuntu:~$ 算出来和使用在线工具算出来的不一样http://tools.bugscaner.com/cryptosha256/ 原因是echo默认会在字符串末尾追加 群 (team)和 群标签关系 (team_tag_relation) 关系:一个群对应多个标签 team 中有群人数字段,当left join 群标签关系 ,如果某个群拥有3个标签,则该群的数据会出现3次,导致进行 sum (群人数)会 sum 多次,即群人数会翻3倍,造成数据错误。 解决方案: 避免直接将两个 进行left join 先处理群标签关系 (team_tag_relation),将多条数据聚合为一条,sql如下: select team_id, GROUP_CONCAT(t 在 MySQL 中,当进行一对多的数据 关联查询 ,有 会导致结果中出现重复数据的情况。这是由于多个关联的子 记录与主 记录进行了笛卡尔积,从而产生了重复的结果。上述查询将使用GROUP BY子句按照主 的id进行分组,并使用GROUP_CONCAT函数将多个子 记录合并为一个字符串。上述查询将使用子查询获取子 的数据,并通过 GROUP_CONCAT 函数将多个子 记录合并为一个字符串。上述查询中,子查询通过使用DISTINCT关键字去除了子 中的重复数据,然后与主 进行关联。 你得到了笛卡尔结果。由于您没有显示每个“ID”有多少“1”,“2”或“3”计数,因此只需从这些 中自行选择一个()。由于没有group by的总和将始终产生一条记录,因此您不需要任何连接,它将为每个摘要提取一条记录的结果,而不会产生笛卡尔结果。由于您的原始查询是LEFT JOIN 到其他查询,因此ID已经存在于 1中,因此为什么在每个子 中重新查询计数不同。SELECT Sum ForTable1.x1... ,countDistinct(a.imei) uv ,countDistinct(a.user_id) uv2 ,countDistinct(case when a.click='是' then a.imei end) pv_click mysql 列存储引擎-多 left Join 查询结果错误-记录关联ISSUE: https://github.com/stoneatom/stonedb/issues/925 有几个 问题 ... bhds_mileage和之间的部分笛卡尔积(叉积)bhds_timecard,因为一个 中的每个明细行(组内)将与另一 中的明细行“交叉连接”。发生在GROUP BY操作折叠行并计算 SUM 之前。这就解释了为什么您看到“膨胀的”值。解决方法是在内联视图中计算至少一个 SUM ()聚合...像第一个查询中的一个一样完成 SUM ()/ GROUP BY()。为了清楚起见,您可以对两个原始查... 今天写项目 ,需要将一个车辆的所有费用做汇总处理,包括加油费和保险事故等等 刚开始使用左连接,然后对加油 和保险 的费用一栏用 SUM 进行处理,代码如下: select b.id,b.plate_number, SUM ( bx.pay_money), SUM (o.money) from base b left join baoxian bx on b.id=b. 单 的唯一查询用:distinct 多 的唯一查询用:group by –但是注意下面的坑 参考: https://blog.csdn.net/lkforce/article/details/52598155 GROUP BY 和 ORDER BY一起使用 ,ORDER BY要在GROUP BY的后面。 写的顺序:... 多 关联一对多查询取最新的一条数据,数据出现重复 由于历史原因, 结构设计不合理;产品告诉我说需要导出客户信息数据,需要导出客户的 所属行业,纳税性质 数据;但是这两个字段却在订单 里面,每次客户下单都会要求客户填写;由此可知,客户数据和订单数据是一对多的关系;那这样的话, 问题 就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意... SELECTGROUP_CONCAT( DISTINCT fa.nickname ),GROUP_CONCAT( DISTINCT ev.facility_id ),CONVERT ( SUM ( ev.income ),DECIMAL ( 10, 2 )) AS su,COUNT( ev.income ),GROUP_CONCAT( ev.income )FROMevery_day_income A... <br /><br /> Join 关联结果不 正确 问题 <br />By Katana<br /> <br /> Join 命令是一个非常高效的命令,大家都用的非常多,但是有 候join的结果会有些 问题 ,很多同事问过 Join 命令为什么有 候不能 正确 关联出数据,经过研究发现如下:<br />    大家都知道 join 之前是需要sort的,先看一个 join 实例:<br />    文件1:1.txt<br />        1.txt<br />        1002547 14<br />        1