Thread: About Div
Dear All,<br /><br />I have a problem with this case :<br /><br />I have 10 candy for 7 child (A, B, C, D, E, F, G).<br /><br/>Table X :<br />code value<br /> ------- -------- <br /> A 0 <br /> B 0 <br /> C 0 <br /> D 0 <br /> E 0 <br /> F 0 <br /> G 0 <br /><br/>And I want divide it with this algorithm : <br /> A = 10 / 7 = 1<br /> B = (10-1) / (7-1) = 9 / 6 = 1<br /> C = (10-2) / (7-2) = 8 / 5 = 1<br /> D = (10-3) / (7-3) = 7 / 4 = 1<br /> E = (10-4) / (7-4) = 6 / 3 = 2<br /> F = (10-6) / (7-5) = 4 / 2 = 2<br /> G = (10-8) / (7-6) = 2 / 2 = 2<br /><br />In my first solution i use loop -for each record in my function.<br />But it is too slow in a lot of data.<br />Did postgresql have a function for my case?<br/><br />Thanks All.<br /><br /><br /><div style="text-align: center;"><span style="color: rgb(0, 128, 255); font-style:italic;">-- </span><br style="color: rgb(0, 128, 255); font-style: italic;" /><span style="color: rgb(0, 128,255); font-style: italic;">"He who is quick to become angry will commit folly, and a crafty man is hated" </span><br/></div><p><hr size="1" />Do you Yahoo!?<br /> Everyone is raving about the <a href="http://us.rd.yahoo.com/evt=42297/*http://advision.webevents.yahoo.com/handraisers">all-new Yahoo! Mail Beta.</a>
On 7/25/06, Otniel Michael <otmic_ie@yahoo.com> wrote:
No loop necessary. This is a simple math problem:
dividedamount := candy / childcount;
extra = candy % childcount;
So the first (childcount - extra) get (dividedamount) pieces of candy and the last (extra) get (dividedamount + 1) pieces of candy.
==================================================================
Aaron Bono
Aranya Software Technologies, Inc.
http://www.aranya.com
==================================================================
Dear All,
I have a problem with this case :
I have 10 candy for 7 child (A, B, C, D, E, F, G).
Table X :
code value
------- --------
A 0
B 0
C 0
D 0
E 0
F 0
G 0
And I want divide it with this algorithm :
A = 10 / 7 = 1
B = (10-1) / (7-1) = 9 / 6 = 1
C = (10-2) / (7-2) = 8 / 5 = 1
D = (10-3) / (7-3) = 7 / 4 = 1
E = (10-4) / (7-4) = 6 / 3 = 2
F = (10-6) / (7-5) = 4 / 2 = 2
G = (10-8) / (7-6) = 2 / 2 = 2
In my first solution i use loop - for each record in my function.
But it is too slow in a lot of data.
Did postgresql have a function for my case?
dividedamount := candy / childcount;
extra = candy % childcount;
So the first (childcount - extra) get (dividedamount) pieces of candy and the last (extra) get (dividedamount + 1) pieces of candy.
==================================================================
Aaron Bono
Aranya Software Technologies, Inc.
http://www.aranya.com
==================================================================
Mr. Aaron. I am sorry, your solution didn't match in my case.
Example for your solution :
A = 1
B = 1
C = 1
D = 1
E = 1
F = 1
G = 4
G have 4 candy. Its too much for G.
In my case, the solution is :
A = 1
B = 1
C = 1
D = 1
E = 2
F = 2
G = 2
The extra candy is given to three child.
Do you have the other solution? I need function in postgresql for my case.
Because my loop is too slow.
Btw thanks for your solution.
Aaron Bono <postgresql@aranya.com> wrote:
Example for your solution :
A = 1
B = 1
C = 1
D = 1
E = 1
F = 1
G = 4
G have 4 candy. Its too much for G.
In my case, the solution is :
A = 1
B = 1
C = 1
D = 1
E = 2
F = 2
G = 2
The extra candy is given to three child.
Do you have the other solution? I need function in postgresql for my case.
Because my loop is too slow.
Btw thanks for your solution.
Aaron Bono <postgresql@aranya.com> wrote:
On 7/25/06, Otniel Michael <otmic_ie@yahoo.com> wrote:Dear All,
I have a problem with this case :
I have 10 candy for 7 child (A, B, C, D, E, F, G).
Table X :
code value
------- --------
A 0
B 0
C 0
D 0
E 0
F 0
G 0
And I want divide it with this algorithm :
A = 10 / 7 = 1
B = (10-1) / (7-1) = 9 / 6 = 1
C = (10-2) / (7-2) = 8 / 5 = 1
D = (10-3) / (7-3) = 7 / 4 = 1
E = (10-4) / (7-4) = 6 / 3 = 2
F = (10-6) / (7-5) = 4 / 2 = 2
G = (10-8) / (7-6) = 2 / 1 = 2
In my first solution i use loop - for each record in my function.
But it is too slow in a lot of data.
Did postgresql have a function for my case?No loop necessary. This is a simple math problem:
dividedamount := candy / childcount;
extra = candy % childcount;
So the first (childcount - extra) get (dividedamount) pieces of candy and the last (extra) get (dividedamount + 1) pieces of candy.
==================================================================
Aaron Bono
Aranya Software Technologies, Inc.
http://www.aranya.com
==================================================================
--
"He who is quick to become angry will commit folly, and a crafty man is hated"
"He who is quick to become angry will commit folly, and a crafty man is hated"
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Otniel Michael wrote: > Mr. Aaron. I am sorry, your solution didn't match in my case. > Example for your solution : > A = 1 > B = 1 > C = 1 > D = 1 > E = 1 > F = 1 > G = 4 > > G have 4 candy. Its too much for G. > > In my case, the solution is : > A = 1 > B = 1 > C = 1 > D = 1 > E = 2 > F = 2 > G = 2 > > The extra candy is given to three child. > > Do you have the other solution? I need function in postgresql for my case. > Because my loop is too slow. Would this achieve the result you're looking for, or must it be done with a function? Assuming you already know the value of totalchildren and totalcandy: BEGIN -- Everyone gets at least this number, which could be zero or more. UPDATE X SET value = (totalcandy / totalchildren); -- Hand the remainder out one at a time until all are gone. UPDATE X SET value = (value + 1) WHERE code = (SELECT code FROM X ORDER BY code DESC LIMIT (totalcandy % totalchildren)); COMMIT Ross
On 7/25/06, Otniel Michael <otmic_ie@yahoo.com> wrote:
I think you misunderstood how to use the MOD value. 10 % 7 = 3 so the last 3 people get 1 extra, NOT the last person getting the extra 3.
But it looks like Ross got you the code to fix the problem. Check what he provided.
==================================================================
Aaron Bono
Aranya Software Technologies, Inc.
http://www.aranya.com
==================================================================
Mr. Aaron. I am sorry, your solution didn't match in my case.
Example for your solution :
A = 1
B = 1
C = 1
D = 1
E = 1
F = 1
G = 4
G have 4 candy. Its too much for G.
In my case, the solution is :
A = 1
B = 1
C = 1
D = 1
E = 2
F = 2
G = 2
The extra candy is given to three child.
Do you have the other solution? I need function in postgresql for my case.
Because my loop is too slow.
Btw thanks for your solution.
But it looks like Ross got you the code to fix the problem. Check what he provided.
==================================================================
Aaron Bono
Aranya Software Technologies, Inc.
http://www.aranya.com
==================================================================