Thread: calculating percentages
Hi. I am trying to do outcome studies on pt before and after treatment recidivism rates...and having some trouble calculating percentages. How does one do this: SELECT (current_value/target) * 100; in postgres? Cheers - and thanks, Tom ------- North Richmond Community Mental Health Center ------- Thomas Good MIS Coordinator Vital Signs: tomg@ { admin | q8 } .nrnet.org Phone: 718-354-5528 Fax: 718-354-5056 /* Member: Computer Professionals For Social Responsibility */
Thomas Good <tomg@admin.nrnet.org> writes: > How does one do this: SELECT (current_value/target) * 100; > in postgres? Pretty much just like that. What problem are you having? regards, tom lane
On Mon, 12 Jul 1999, Tom Lane wrote: > Thomas Good <tomg@admin.nrnet.org> writes: > > How does one do this: SELECT (current_value/target) * 100; > > in postgres? > Pretty much just like that. What problem are you having? > > regards, tom lane The divison rtns 0, which multiplied by 100, rtns 0. It's neat. But not quite the dramatic proof (of the efficacy of our treatment) that my superiors are looking for! ------- North Richmond Community Mental Health Center ------- Thomas Good MIS Coordinator Vital Signs: tomg@ { admin | q8 } .nrnet.org Phone: 718-354-5528 Fax: 718-354-5056 /* Member: Computer Professionals For Social Responsibility */
Thomas Good <tomg@nrnet.org> writes: > On Mon, 12 Jul 1999, Tom Lane wrote: >> Pretty much just like that. What problem are you having? > The divison rtns 0, which multiplied by 100, rtns 0. If your data is stored as int fields, then you'd get integer division, which sounds like what you're getting. You want a floating-point division, which you'd get by promoting to float: SELECT (current_value::float8/target::float8) * 100; regards, tom lane
Thus spake Thomas Good > > > How does one do this: SELECT (current_value/target) * 100; > The divison rtns 0, which multiplied by 100, rtns 0. Does "SELECT (current_value * 100)/target" work better? -- D'Arcy J.M. Cain <darcy@{druid|vex}.net> | Democracy is three wolves http://www.druid.net/darcy/ | and a sheep voting on +1 416 424 2871 (DoD#0082) (eNTP) | what's for dinner.
On Tue, 13 Jul 1999, D'Arcy J.M. Cain wrote: > Thus spake Thomas Good > > > > How does one do this: SELECT (current_value/target) * 100; > > The divison rtns 0, which multiplied by 100, rtns 0. > > Does "SELECT (current_value * 100)/target" work better? Darcy, SELECT (2 * 100)/3; ?column? ---------------- 66 (1 row) This is clean and I don't have to truncate the value in the end. Thanks! BTW, I noticed an idiosnycratic behaviour that I don't really care for when doing floating point calculations: SELECT (2::float8/3::float8) * 100; ?column? ---------------- 66.6666666666667 <----------------- I don't need to round up here. (1 row) EOF So, Larry W comes in handy again: #!/usr/bin/perl $val = (2/3) * 100; print("$val\n"); 66.6666666666666 ------- North Richmond Community Mental Health Center ------- Thomas Good MIS Coordinator Vital Signs: tomg@ { admin | q8 } .nrnet.org Phone: 718-354-5528 Fax: 718-354-5056 /* Member: Computer Professionals For Social Responsibility */
Thus spake Thomas Good > > > How does one do this: SELECT (current_value/target) * 100; > The divison rtns 0, which multiplied by 100, rtns 0. Does "SELECT (current_value * 100)/target" work better? -- D'Arcy J.M. Cain <darcy@{druid|vex}.net> | Democracy is three wolves http://www.druid.net/darcy/ | and a sheep voting on +1 416 424 2871 (DoD#0082) (eNTP) | what's for dinner.