Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL-处理空查询结果_Sql_Postgresql - Fatal编程技术网

PostgreSQL-处理空查询结果

PostgreSQL-处理空查询结果,sql,postgresql,Sql,Postgresql,我对SQL非常陌生,目前正在使用PostgreSQL处理一些调查结果。我需要计算所有调查问题的5分制中每个选项的百分比。我有一个带有respondentid、questionid、questionresponse值的表。从另一个表中检索筛选数据切割所需的人口统计信息。然后将查询传递到结果表。特定数据切割的所有查询文本均由VBA脚本生成 一般来说,它工作正常,但有一个问题——当并没有针对特定剪切的响应者时,我收到空表作为查询结果。如果响应者计数大于0但低于计算阈值5,则我得到的表中充满了空值,这是

我对SQL非常陌生,目前正在使用PostgreSQL处理一些调查结果。我需要计算所有调查问题的5分制中每个选项的百分比。我有一个带有respondentid、questionid、questionresponse值的表。从另一个表中检索筛选数据切割所需的人口统计信息。然后将查询传递到结果表。特定数据切割的所有查询文本均由VBA脚本生成

一般来说,它工作正常,但有一个问题——当并没有针对特定剪切的响应者时,我收到空表作为查询结果。如果响应者计数大于0但低于计算阈值5,则我得到的表中充满了空值,这是可以的。对于0个应答者,我得到0行作为结果,并没有任何内容传递给结果表,这会导致最终表中出现一些位移。我能够跟踪这些削减,因为我还计算了总体数据削减的受访者数量,并将其存储在另一个表中。但在这一点上我能做些什么吗?生成一个满是空值的表,在需要时可以插入到结果表中

提前感谢,并对代码的笨拙表示歉意

WITH ItemScores AS (
SELECT
    rsp.questionid,
    CASE WHEN SUM(CASE WHEN rsp.respvalue >= 0 THEN 1 ELSE 0 END) < 5 THEN 
NULL 
ELSE
    ROUND(SUM(CASE WHEN rsp.respvalue = 5 THEN 1 ELSE 0 END)/CAST(SUM(CASE 
    WHEN rsp.respvalue >= 0 THEN 1 ELSE 0 END) AS DECIMAL),2)
END AS 5spercentage,

... and so on for frequencies of 1s,2s,3s and 4s

SUM(CASE WHEN rsp.respvalue >= 0 THEN 1 ELSE 0 END) AS QuestionTotalAnswers

FROM (
    some filtering applied here [...]
     ) AS rsp

GROUP BY rsp.questionid
ORDER BY rsp.questionid;
INSERT INTO results_items SELECT * from ItemScores;

如果要确保questionid列不会为空,则必须使用其普通值调用cte,然后与实际用于进行聚合、计算等的表左键联接。因此,它将确保生成第一个列表,然后联接其值

其概念的示例如下:

with calcs as (
select questionid, sum(respvalue) as sum_per_question
from rsp
group by questionid)

select distinct rsp.questionid, calcs.sum_per_question
from rsp
left join calcs on rsp.questionid = calcs.questionid

非常感谢Julinho的这个概念-它对我有用:。