j*******n 发帖数: 130 | 1 做作业遇到麻烦了,请各位大牛帮帮忙。
如图,在每个segmentid,load一定重量的货物,然后运送到下个segment。
要求算出在货物运输的过程中,货物的重量*货物的距离。
比如这个表里,要算的结果是:
1000*400+(1000+4000)*480+(1000+4000+7000)*360+(1000+4000+7000+11000)*
600+(1000+4000+7000+11000+5000)*240
多谢了 |
d***e 发帖数: 793 | 2 This is MySQL solution. You can try to adjust to PL/SQL
SELECT SUM(product)
from
(
select t1.distance*sum(t2.gweight) product from test_seg as t1
join test_seg as t2 on t1.segid >= t2.segid
group by t1.segid
) result
; |
j*******n 发帖数: 130 | 3 谢谢,我试了你的代码,思路应该是对的
但是有错误,问题出在sum(t2.gweight)这里,这个出来的结果只有一个值,所以和t1.
distance相乘就出错了。有什么好的解决办法吗?
谢谢回复!
【在 d***e 的大作中提到】 : This is MySQL solution. You can try to adjust to PL/SQL : SELECT SUM(product) : from : ( : select t1.distance*sum(t2.gweight) product from test_seg as t1 : join test_seg as t2 on t1.segid >= t2.segid : group by t1.segid : ) result : ;
|
B*****g 发帖数: 34098 | 4 90%+的数据库版SQL问题可以用partition by解决,自己狗lead/lag
【在 j*******n 的大作中提到】 : 做作业遇到麻烦了,请各位大牛帮帮忙。 : 如图,在每个segmentid,load一定重量的货物,然后运送到下个segment。 : 要求算出在货物运输的过程中,货物的重量*货物的距离。 : 比如这个表里,要算的结果是: : 1000*400+(1000+4000)*480+(1000+4000+7000)*360+(1000+4000+7000+11000)* : 600+(1000+4000+7000+11000+5000)*240 : : 多谢了
|
d***e 发帖数: 793 | 5 group时候把t1.distance加上,我用mysql不会报错,因为会用top 1 value,是一样的
t1.
【在 j*******n 的大作中提到】 : 谢谢,我试了你的代码,思路应该是对的 : 但是有错误,问题出在sum(t2.gweight)这里,这个出来的结果只有一个值,所以和t1. : distance相乘就出错了。有什么好的解决办法吗? : 谢谢回复!
|
l******b 发帖数: 39 | 6
beijing老大的东西都是经典.呵
对后台应用程序, 是不是如果如果可以用SQL的地方,
都尽量不用数组之类的?
【在 B*****g 的大作中提到】 : 90%+的数据库版SQL问题可以用partition by解决,自己狗lead/lag
|
B*****g 发帖数: 34098 | 7 From TK:
I have a pretty simple mantra when it comes to developing database software,
and I have written this many times over the years:
You should do it in a single SQL statement if at all possible.
If you cannot do it in a single SQL statement, do it in PL/SQL.
If you cannot do it in PL/SQL, try a Java stored procedure.
If you cannot do it in Java, do it in a C external procedure.
If you cannot do it in a C external procedure, you might want to
seriously think about why it is you need to do it.
http://www.oracle.com/technetwork/issue-archive/2007/07-mar/o27
【在 l******b 的大作中提到】 : : beijing老大的东西都是经典.呵 : 对后台应用程序, 是不是如果如果可以用SQL的地方, : 都尽量不用数组之类的?
|
j*******n 发帖数: 130 | 8 有点不一样,改半天终于出结果了,非常感谢。包子已发
【在 d***e 的大作中提到】 : group时候把t1.distance加上,我用mysql不会报错,因为会用top 1 value,是一样的 : : t1.
|
l******b 发帖数: 39 | 9
software,
仔细读了TK的这个帖子, 学到不少, 谢谢.
【在 B*****g 的大作中提到】 : From TK: : I have a pretty simple mantra when it comes to developing database software, : and I have written this many times over the years: : You should do it in a single SQL statement if at all possible. : If you cannot do it in a single SQL statement, do it in PL/SQL. : If you cannot do it in PL/SQL, try a Java stored procedure. : If you cannot do it in Java, do it in a C external procedure. : If you cannot do it in a C external procedure, you might want to : seriously think about why it is you need to do it. : http://www.oracle.com/technetwork/issue-archive/2007/07-mar/o27
|
j*******n 发帖数: 130 | 10 麻烦再帮我看下这个问题吧。。
这次要做的结果是:
1000*360+(1000+5000)*600+(1000+5000+3500)*240
表里的第一行distance和最后一行的gweight用不到,不用算到公式里。
多谢了
【在 d***e 的大作中提到】 : group时候把t1.distance加上,我用mysql不会报错,因为会用top 1 value,是一样的 : : t1.
|
d***e 发帖数: 793 | 11 把》=换成> 就行了,你做作业,得自己想想吧,同学。
【在 j*******n 的大作中提到】 : 麻烦再帮我看下这个问题吧。。 : 这次要做的结果是: : 1000*360+(1000+5000)*600+(1000+5000+3500)*240 : 表里的第一行distance和最后一行的gweight用不到,不用算到公式里。 : 多谢了
|
j*******n 发帖数: 130 | 12 嗯,你回复晚了,之前我自己想出来了,哈哈
【在 d***e 的大作中提到】 : 把》=换成> 就行了,你做作业,得自己想想吧,同学。
|