Ich möchte herausfinden, wie viel Prozent "gut", "normal" und "schlecht" in den Umfragen enthalten sind. Welche Art von SQL soll ich schreiben?
Inhalt der Umfragetabelle (insgesamt 13 Artikel)
id | user_id | answer |
---|---|---|
1 | 251 | War gut |
2 | 113 | War gut |
3 | 46 | Gewöhnlich |
4 | 414 | War gut |
5 | 456 | War gut |
6 | 18 | Gewöhnlich |
7 | 173 | Gewöhnlich |
8 | 441 | War gut |
9 | 419 | Es war schlecht |
10 | 157 | Gewöhnlich |
11 | 116 | War gut |
12 | 204 | War gut |
13 | 445 | Es war schlecht |
Wert, den Sie berechnen möchten
Es kann mit solchem SQL berechnet werden.
SELECT
TO_CHAR(
100.0 * SUM(CASE WHEN answer = 'War gut' THEN 1 ELSE 0 END) / COUNT(*),
'999.9%'
) AS "War gut",
TO_CHAR(
100.0 * SUM(CASE WHEN answer = 'Gewöhnlich' THEN 1 ELSE 0 END) / COUNT(*),
'999.9%'
) AS "Gewöhnlich",
TO_CHAR(
100.0 * SUM(CASE WHEN answer = 'Es war schlecht' THEN 1 ELSE 0 END) / COUNT(*),
'999.9%'
) AS "Es war schlecht"
FROM surveys
Ausgabeergebnis
War gut | Gewöhnlich | Es war schlecht | |
---|---|---|---|
1 | 53.8% | 30.8% | 15.4% |
--SUM (FALL WENN Antwort = 'Gut' DANN 1 SONST 0 ENDE)
zählt, wie viele" gut "waren. (7 hier)
--Zählen Sie die Gesamtzahl der Elemente in der Tabelle mit "COUNT (*)" (13 hier).
TO_CHAR
(TO_CHAR (53.8461538, '999.9%')
→53.8%
)
--Berechnen Sie den Prozentsatz von "normal" und "schlecht" nach dem gleichen VerfahrenSie können das Ausführungsergebnis von SQL überprüfen, indem Sie auf die folgende Site zugreifen und auf die Schaltfläche "Ausführen" klicken.
https://rextester.com/XINWIX39774
Wenn Sie es mit Ruby on Rails implementieren, sieht es so aus.
#Schreiben Sie SQL für die SELECT-Klausel
sql = <<~SQL
100.0 * SUM(CASE WHEN answer = 'War gut' THEN 1 ELSE 0 END) / COUNT(*) AS good,
100.0 * SUM(CASE WHEN answer = 'Gewöhnlich' THEN 1 ELSE 0 END) / COUNT(*) AS fair,
100.0 * SUM(CASE WHEN answer = 'Es war schlecht' THEN 1 ELSE 0 END) / COUNT(*) AS bad
SQL
#Führen Sie SQL aus, um den Wert abzurufen
survey = Survey.select(sql)[0]
survey.good #=> 53.8461538
survey.fair #=> 30.7692308
survey.bad #=> 15.3846154
Ergänzende Erklärung
――Wenn Sie den Spaltenalias in Japanisch ändern, ist er nicht mit dem Programm kompatibel. Hier ist er also gut / fair / schlecht.
Aus dem Kommentarbereich dieses Artikels.
SELECT
TO_CHAR(
AVG(CASE WHEN answer = 'War gut' THEN 100 ELSE 0 END),
'999.9%'
) AS "War gut",
TO_CHAR(
AVG(CASE WHEN answer = 'Gewöhnlich' THEN 100 ELSE 0 END),
'999.9%'
) AS "Gewöhnlich",
TO_CHAR(
AVG(CASE WHEN answer = 'Es war schlecht' THEN 100 ELSE 0 END),
'999.9%'
) AS "Es war schlecht"
FROM surveys;
(Das Ausführungsergebnis ist das gleiche wie im obigen Text)
SELECT
answer,
TO_CHAR(
100.0 * COUNT(*) / (SELECT COUNT(*) FROM surveys),
'999.9%'
) AS "rate"
FROM surveys
GROUP BY answer
ORDER BY rate DESC;
Ausführungsergebnis
answer | rate |
---|---|
War gut | 53.8% |
Gewöhnlich | 30.8% |
Es war schlecht | 15.4% |
Recommended Posts