Trouble in calculating the field while creating view in postgresql -
i have 2 tables q1data , q1lookup in postgres database. q1data contains 3 columns (postid, reasonid, other) , q1lookup contains 2 columns (reasonid, reason).
i trying create view include 4 columns (reasonid, reason, count, percentage). count count of each reason , percentage should each count divided total of count(*) q1data (i.e. total rows if reasonid).
but gives error , says syntax error near count(*). following code using. please help.
select cwfis_web.q1data.reasonid reasonid, cwfis_web.q1lookup.reason reason, count(cwfis_web.q1data.reasonid) count, round( ( ( count(cwfis_web.q1data.reasonid) / (select count(0) count(*) cwfis_web.q1data) ) * 100 ) ,0) percentage cwfis_web.q1data join cwfis_web.q1lookup on cwfis_web.q1data.reasonid = cwfis_web.q1lookup.reasonid group cwfis_web.q1data.reasonid;
firstly, have invalid piece of syntax there: count(0) count(*). replacing plain count(*), , adding missing group by entry reason, gives this:
select cwfis_web.q1data.reasonid reasonid, cwfis_web.q1lookup.reason reason, count(cwfis_web.q1data.reasonid) count, round( ( ( count(cwfis_web.q1data.reasonid) / (select count(*) cwfis_web.q1data) ) * 100 ) ,0) percentage cwfis_web.q1data join cwfis_web.q1lookup on cwfis_web.q1data.reasonid = cwfis_web.q1lookup.reasonid group cwfis_web.q1data.reasonid, cwfis_web.q1lookup.reason; however, as live demo shows doesn't give right value percentage, because count(cwfis_web.q1data.reasonid) , (select count(*) cwfis_web.q1data) both of type integer, integer division performed, , result truncated 0.
if cast these numeric (the expected argument type of the 2-parameter round() function, this:
select cwfis_web.q1data.reasonid reasonid, cwfis_web.q1lookup.reason reason, count(cwfis_web.q1data.reasonid) count, round( ( ( count(cwfis_web.q1data.reasonid)::numeric / (select count(*) cwfis_web.q1data)::numeric ) * 100 ) ,0) percentage cwfis_web.q1data join cwfis_web.q1lookup on cwfis_web.q1data.reasonid = cwfis_web.q1lookup.reasonid group cwfis_web.q1data.reasonid, cwfis_web.q1lookup.reason; which this live demo shows gives more hoping for. (alternatively, can cast float, , lose ,0 argument round(), as in demo.)
Comments
Post a Comment