BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #3846同步于 2009/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

问题:计算比例。求sql代码

LoveAmethyst
2009/9/19镜像同步11 回复
DB: MySQL table a id num -------------- ------------ 1001 4 1002 3 1003 2 1004 1 我想统计下每行num占所有num值的比例。 以id=1001行为例: 4/(4+3+2+1)=0.4 有没有简单的sql代码? 谢谢。求高手指点。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
hong机器人#1 · 2009/9/20
不是高手.咱们可以讨论下. 不知道下面这种方法可行不.在oracle下是可以的. 先用个子查询生成个内联视图.里头只包含sum(num) 然后在父查询中使用在每条记录上 select id,num/xxx.total from a,(select sum(num) total from a) xxx;
LoveAmethyst机器人#2 · 2009/9/20
非常感谢。Mysql 可行。 [em21] 【 在 HONG 的大作中提到: 】 : 不是高手.咱们可以讨论下. : 不知道下面这种方法可行不.在oracle下是可以的. : 先用个子查询生成个内联视图.里头只包含sum(num) : ...................
gfbyr机器人#3 · 2009/10/7
select id,num/sum(num) from a; 这个为什么不行?
coolfantasy机器人#4 · 2009/10/8
SUM() 是个聚合运算 【 在 gfbyr (gfbyr) 的大作中提到: 】 : select id,num/sum(num) : from a; : 这个为什么不行? : ...................
gfbyr机器人#5 · 2009/10/9
【 在 coolfantasy 的大作中提到: 】 : SUM() 是个聚合运算 知道是聚合运算,聚合运算也可以用在select语句中的呀,麻烦详细说下这个怎么不行 select id,num/sum(num) from a; 这个为什么不行?
nujevoli机器人#6 · 2009/10/9
因为聚合运算的意义是将多条记录聚合为一条记录,所以记录中的所有字段都得进行聚合,如果不聚合就不能出现在查询中,你的例子中,NUM字段用求和的方式聚合了,但ID字段没有进行聚合,他们就不能出现在同一个查询中。 【 在 gfbyr 的大作中提到: 】 : 知道是聚合运算,聚合运算也可以用在select语句中的呀,麻烦详细说下这个怎么不行 : select id,num/sum(num) : from a; : ...................
coolfantasy机器人#7 · 2009/10/9
聚合字段和非聚合字段必须有GROUP BY的约束才能共存 你改成 SELECT id, num/SUM(num) FROM a GROUP BY id; 应该就可以了 【 在 gfbyr 的大作中提到: 】 : 知道是聚合运算,聚合运算也可以用在select语句中的呀,麻烦详细说下这个怎么不行 : select id,num/sum(num) : from a; : ...................
nujevoli机器人#8 · 2009/10/9
你这说法是正确的,但不能解决楼主的问题,楼主表里ID是唯一的,group by id 后查询出来还是和原表一样,要想求出全部记录的和,就不能在查询中出现ID。 【 在 coolfantasy 的大作中提到: 】 : 聚合字段和非聚合字段必须有GROUP BY的约束才能共存 : 你改成 SELECT id, num/SUM(num) FROM a GROUP BY id; 应该就可以了
coolfantasy机器人#9 · 2009/10/9
对 我的方法只能让数据库可以执行SQL语句 【 在 nujevoli 的大作中提到: 】 : 你这说法是正确的,但不能解决楼主的问题,楼主表里ID是唯一的,group by id 后查询出来还是和原表一样,要想求出全部记录的和,就不能在查询中出现ID。