Mysql 的bug?子查询包含group by结果各异

三张表,字段和数据如下,简单起见都是整形:

zzz_repair:==》维修订单表, 列依次为:维修单号, 省份

 

zzz_repair_goods:==》维修商品表, 列依次为 维修单号、商品名称、商品数量

 

zzz_sell: ==》销售表,列依次为销售单号、销售省份、销售数量

 

sql: =>求平均每个省的返修比率

select data_view.province,
sum(num) repairNum, --维修数量
(select sum(num) from zzz_sell z where z.province=data_view.province) as sellNum, --销售数量
sum(num)/(select sum(num) from zzz_sell z where z.province=data_view.province) as rate --维修比率 from (select a.province, b.num from zzz_repair a, zzz_repair_goods b where a.sn=b.sn) data_view --关联维修表与维修商品表 group by data_view.province --按省分组

  

 最后的结果如下(你可以直接用最后附上的sql拷贝到sql分析器里面,看看结果));怎么结果差异这么大?是sql写的不对还是?

MySQL 5.5

 

MySQL 5.6

 

 

 附上所有脚本:

drop table IF EXISTS zzz_repair;
drop table IF EXISTS zzz_repair_goods;
drop table IF EXISTS zzz_sell;

CREATE TABLE IF NOT EXISTS `zzz_repair` (
  `sn` int(11) NOT NULL,
  `province` varchar(64) NOT NULL
) ;
INSERT INTO `zzz_repair` (`sn`, `province`) VALUES
(1, '北京'),
(2, '上海');

CREATE TABLE IF NOT EXISTS `zzz_repair_goods` (
  `sn` int(11) NOT NULL,
  `name` int(11) NOT NULL,
  `num` int(11) NOT NULL
) ;

INSERT INTO `zzz_repair_goods` (`sn`, `name`, `num`) VALUES
(1, 2, 10),
(2, 2, 5);
CREATE TABLE IF NOT EXISTS `zzz_sell` (
  `sn` int(11) NOT NULL,
  `province` varchar(64) NOT NULL,
   `num` int(11) NOT NULL
) ;
INSERT INTO `zzz_sell` (`sn`, `province`, `num`) VALUES
(1, '北京', 20),
(2, '上海', 20),
(3, '上海', 20);

select data_view.province,
sum(num) repairNum,
(select sum(num) from zzz_sell z where z.province=data_view.province) as sellNum,
sum(num)/(select sum(num) from zzz_sell z where z.province=data_view.province) as rate

from (select a.province, b.num from zzz_repair a, zzz_repair_goods b
where a.sn=b.sn) data_view

group by data_view.province

  

posted @ 2016-07-15 16:57  corly  阅读(949)  评论(0)    收藏  举报