我對SQL很陌生,目前我正在使用PostgreSQL來處理一些調查結果。我需要從所有調查問題的5分制中計算每個選項的百分比。我有一個respondentid,questionid,問題響應值的表。過濾datacut所需的人口統計信息從另一個表中檢索。然後查詢被傳遞給結果表。所有針對特定datacut的查詢文本都是由VBA腳本生成的。PostgreSQL - 處理空的查詢結果
它的工作原理一般,但有一個問題的情況 - 當沒有受訪者爲特定剪切,我收到空表作爲查詢結果。如果受訪者數量大於0但低於計算閾值(5個受訪者),則表中填滿了NULL,這是可以的。對於0名受訪者,我得到0行作爲結果,沒有任何內容傳遞給結果表,並且它在決賽桌中導致一些位移。我能夠跟蹤這種削減,因爲我也在計算整個datacut的受訪者數量並將其存儲在另一個表中。但是在這一點上我能做些什麼 - 生成某種充滿NULL的表,可以在需要時插入結果表中?
在此先感謝並對代碼中的笨拙感到抱歉。
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;
感謝這個概念很多Julinho - 它爲我工作:)。 – japaluis