0

我有两个表q1dataq1lookuppostgres 数据库。q1data包含 3 列 ( postid, reasonid, other) 并q1lookup包含 2 列 ( reasonid, reason)。

我正在尝试创建一个包含 4 列(、、、、reasonidreasoncount视图percentagecount是每个的计数,reason应该percentage每个count除以总数count(*) from q1data(即总行数,如果reasonid)。

但它给出了一个错误,并在 .附近显示语法错误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.reasongroup by.

于 2013-08-07T20:52:38.627 回答
0

首先,那里有一段完全无效的语法:count(0) AS count(*). 用一个普通的替换它count(*),并添加缺少的Group By条目reason,给出这个:

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;

然而,正如这个现场演示显示的那样,这并没有给出正确的值percentage,因为count(cwfis_web.q1data.reasonid)(select count(*) from cwfis_web.q1data)都是类型integer,所以执行整数除法,结果被截断为0

如果将它们转换为( 2-parameter functionnumeric的预期参数类型,你会得到: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 回答