返回信息流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代码?
谢谢。求高手指点。
这是一条镜像帖。来源:北邮人论坛 / database / #3846同步于 2009/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖
问题:计算比例。求sql代码
LoveAmethyst
2009/9/19镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不是高手.咱们可以讨论下.
不知道下面这种方法可行不.在oracle下是可以的.
先用个子查询生成个内联视图.里头只包含sum(num)
然后在父查询中使用在每条记录上
select id,num/xxx.total
from a,(select sum(num) total from a) xxx;
非常感谢。Mysql 可行。
[em21]
【 在 HONG 的大作中提到: 】
: 不是高手.咱们可以讨论下.
: 不知道下面这种方法可行不.在oracle下是可以的.
: 先用个子查询生成个内联视图.里头只包含sum(num)
: ...................
SUM() 是个聚合运算
【 在 gfbyr (gfbyr) 的大作中提到: 】
: select id,num/sum(num)
: from a;
: 这个为什么不行?
: ...................
【 在 coolfantasy 的大作中提到: 】
: SUM() 是个聚合运算
知道是聚合运算,聚合运算也可以用在select语句中的呀,麻烦详细说下这个怎么不行
select id,num/sum(num)
from a;
这个为什么不行?
因为聚合运算的意义是将多条记录聚合为一条记录,所以记录中的所有字段都得进行聚合,如果不聚合就不能出现在查询中,你的例子中,NUM字段用求和的方式聚合了,但ID字段没有进行聚合,他们就不能出现在同一个查询中。
【 在 gfbyr 的大作中提到: 】
: 知道是聚合运算,聚合运算也可以用在select语句中的呀,麻烦详细说下这个怎么不行
: select id,num/sum(num)
: from a;
: ...................
聚合字段和非聚合字段必须有GROUP BY的约束才能共存
你改成 SELECT id, num/SUM(num) FROM a GROUP BY id; 应该就可以了
【 在 gfbyr 的大作中提到: 】
: 知道是聚合运算,聚合运算也可以用在select语句中的呀,麻烦详细说下这个怎么不行
: select id,num/sum(num)
: from a;
: ...................
你这说法是正确的,但不能解决楼主的问题,楼主表里ID是唯一的,group by id 后查询出来还是和原表一样,要想求出全部记录的和,就不能在查询中出现ID。
【 在 coolfantasy 的大作中提到: 】
: 聚合字段和非聚合字段必须有GROUP BY的约束才能共存
: 你改成 SELECT id, num/SUM(num) FROM a GROUP BY id; 应该就可以了
对 我的方法只能让数据库可以执行SQL语句
【 在 nujevoli 的大作中提到: 】
: 你这说法是正确的,但不能解决楼主的问题,楼主表里ID是唯一的,group by id 后查询出来还是和原表一样,要想求出全部记录的和,就不能在查询中出现ID。