0

2 つのテーブルがq1dataありq1lookup、postgres データベースにあります。q1data3 つの列 ( postidreasonidother) をq1lookup含み、2 つの列 ( reasonid、 ) を含みますreason

reasonid4 つの列 ( 、、、、 )reasonを含むビューを作成しようとしていcountますpercentagecountはそれぞれの数であり、それぞれreasonを合計で割るpercentage必要があります(つまり、合計行の場合)。countcount(*) from q1datareasonid

しかし、エラーが発生し、構文エラーが近くにあると表示されますcount(*)。以下は私が使用しているコードです。助けてください。

select 
     cwfis_web.q1data.reasonid AS reasonid,
     cwfis_web.q1lookup.reason AS reason,
     count(cwfis_web.q1data.reasonid) AS count,
     round(
        (
            (
                count(cwfis_web.q1data.reasonid) 
                / 
                (select count(0) AS count(*) from cwfis_web.q1data)
            ) * 100
        )
     ,0) AS percentage 
from 
     cwfis_web.q1data 
join 
     cwfis_web.q1lookup 
     ON cwfis_web.q1data.reasonid = cwfis_web.q1lookup.reasonid 
group by 
     cwfis_web.q1data.reasonid;
4

2 に答える 2

0

サブクエリを次から変更してみてください

select count(0) AS count(*) from cwfis_web.q1data

select count(0) from cwfis_web.q1data

cwfis_web.q1lookup.reasonまた、 に追加する必要がありますgroup by

于 2013-08-07T20:52:38.627 に答える
0

まず、完全に無効な構文があります: count(0) AS count(*). それをプレーンな に置き換え、欠落している のエントリをcount(*)追加すると、次のようになります。Group Byreason

select 
     cwfis_web.q1data.reasonid AS reasonid,
     cwfis_web.q1lookup.reason AS reason,
     count(cwfis_web.q1data.reasonid) AS count,
     round(
        (
            (
                count(cwfis_web.q1data.reasonid) 
                / 
                (select count(*) from cwfis_web.q1data)
            ) * 100
        )
     ,0) AS percentage 
from 
     cwfis_web.q1data 
join 
     cwfis_web.q1lookup 
     ON cwfis_web.q1data.reasonid = cwfis_web.q1lookup.reasonid 
group by 
     cwfis_web.q1data.reasonid,
     cwfis_web.q1lookup.reason;

ただし、このライブ デモが示すように、これは の正しい値を与えませんpercentagecount(cwfis_web.q1data.reasonid)(select count(*) from cwfis_web.q1data)はどちらも 型integerであるため、整数除算が実行され、結果が に切り捨てられ0ます。

これらを( 2 パラメーター関数numericの予想される引数の型) にキャストすると、次のようになります。round()

select 
     cwfis_web.q1data.reasonid AS reasonid,
     cwfis_web.q1lookup.reason AS reason,
     count(cwfis_web.q1data.reasonid) AS count,
     round(
        (
            (
                count(cwfis_web.q1data.reasonid)::numeric
                / 
                (select count(*) from cwfis_web.q1data)::numeric
            ) * 100
        )
     ,0) AS percentage 
from 
     cwfis_web.q1data 
join 
     cwfis_web.q1lookup 
     ON cwfis_web.q1data.reasonid = cwfis_web.q1lookup.reasonid 
group by 
     cwfis_web.q1data.reasonid,
     cwfis_web.q1lookup.reason;

このライブデモが示すように、あなたが望んでいた以上のものを提供します. (または、このデモのように、にキャストして、 への引数をfloat失うこともできます。),0round()

于 2013-08-07T20:57:27.503 に答える