三张表,字段和数据如下,简单起见都是整形:
zzz_repair:==》维修订单表, 列依次为:订单号, 省份
zzz_repair_goods:==》维修商品表, 列依次为 订单号、商品名称、商品数量
zzz_sell: ==》销售表,列依次为销售省份、销售商品、销售数量
sql: =>求平均每个省的返修比率
select
--省份分组
m.province,
--返修数 / 总销售数
sum(num)/(select sum(num) from zzz_sell z where z.province=m.province) as rate
from
--连表
(select a.*, b.num from zzz_repair a, zzz_repair_goods b where a.sn=b.sn) m
--分组求和
group by m.province
最后的结果如下,可见对于省份2,计算结果0.5是正确的才对,为何MySQL 5.5 显示为null
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` int(11) NOT NULL
) ;
INSERT INTO `zzz_repair` (`sn`, `province`) VALUES
(1, 2),
(3, 3),
(5, 5),
(8, 8);
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),
(3, 4, 10),
(5, 6, 10);
CREATE TABLE IF NOT EXISTS `zzz_sell` (
`sn` int(11) NOT NULL,
`province` int(11) NOT NULL,
`num` int(11) NOT NULL
) ;
INSERT INTO `zzz_sell` (`sn`, `province`, `num`) VALUES
(1, 2, 20),
(3, 4, 20),
(5, 6, 20),
(9, 9, 20);