Ich bin ziemlich neu in SQL und ich arbeite derzeit an einigen Umfrageergebnissen mit PostgreSQL. Ich muss die Prozentsätze jeder Option aus der 5-Punkte-Skala für alle Umfragefragen berechnen. Ich habe eine Tabelle mit Antwortkennung, Fragekennung, Frageantwortwert. Demografische Informationen, die zum Filtern von Datenschnitten benötigt werden, werden aus einer anderen Tabelle abgerufen. Dann wird die Abfrage an die Ergebnistabelle übergeben. Alle Abfragetexte für bestimmte Datacuts werden vom VBA-Skript generiert.PostgreSQL - Handhabung leeres Abfrageergebnis
Es funktioniert in der Regel OK, aber es gibt einen problematischen Fall - wenn es keine Befragten für bestimmte Schnitt und ich leere Tabelle als Abfrage erhalten Ergebnis. Wenn die Anzahl der Befragten größer als 0 aber niedriger als der Berechnungsschwellenwert ist (5 Befragte), bekomme ich eine Tabelle voller NULL, was in Ordnung ist. Für 0 Befragte bekomme ich 0 Zeilen als Ergebnis und nichts wird an die Ergebnistabelle übergeben und es verursacht eine gewisse Verschiebung in der Final Table. Ich bin in der Lage, solche Schnitte zu verfolgen, da ich auch die Respondent-Nummer für den gesamten Datenschnitt berechne und sie in einer anderen Tabelle ablege. Aber kann ich an dieser Stelle etwas tun - eine Tabelle mit NULLs erzeugen, die bei Bedarf in die Ergebnistabelle eingefügt werden kann?
Vielen Dank im Voraus und Entschuldigung für Ungeschicklichkeit in Code.
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;
Vielen Dank Julinho für dieses Konzept - es funktioniert für mich :). – japaluis