PostgreSQL-处理空查询结果
我对SQL非常陌生,目前正在使用PostgreSQL处理一些调查结果。我需要计算所有调查问题的5分制中每个选项的百分比。我有一个带有respondentid、questionid、questionresponse值的表。从另一个表中检索筛选数据切割所需的人口统计信息。然后将查询传递到结果表。特定数据切割的所有查询文本均由VBA脚本生成 一般来说,它工作正常,但有一个问题——当并没有针对特定剪切的响应者时,我收到空表作为查询结果。如果响应者计数大于0但低于计算阈值5,则我得到的表中充满了空值,这是可以的。对于0个应答者,我得到0行作为结果,并没有任何内容传递给结果表,这会导致最终表中出现一些位移。我能够跟踪这些削减,因为我还计算了总体数据削减的受访者数量,并将其存储在另一个表中。但在这一点上我能做些什么吗?生成一个满是空值的表,在需要时可以插入到结果表中 提前感谢,并对代码的笨拙表示歉意PostgreSQL-处理空查询结果,sql,postgresql,Sql,Postgresql,我对SQL非常陌生,目前正在使用PostgreSQL处理一些调查结果。我需要计算所有调查问题的5分制中每个选项的百分比。我有一个带有respondentid、questionid、questionresponse值的表。从另一个表中检索筛选数据切割所需的人口统计信息。然后将查询传递到结果表。特定数据切割的所有查询文本均由VBA脚本生成 一般来说,它工作正常,但有一个问题——当并没有针对特定剪切的响应者时,我收到空表作为查询结果。如果响应者计数大于0但低于计算阈值5,则我得到的表中充满了空值,这是
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的这个概念-它对我有用:。