J'aimerais connaître le pourcentage de «bons», «normaux» et «mauvais» inclus dans les enquêtes. Quel type de SQL dois-je écrire?
Contenu du tableau des enquêtes (13 éléments au total)
id | user_id | answer |
---|---|---|
1 | 251 | C'était bien |
2 | 113 | C'était bien |
3 | 46 | habituellement |
4 | 414 | C'était bien |
5 | 456 | C'était bien |
6 | 18 | habituellement |
7 | 173 | habituellement |
8 | 441 | C'était bien |
9 | 419 | C'était mauvais |
10 | 157 | habituellement |
11 | 116 | C'était bien |
12 | 204 | C'était bien |
13 | 445 | C'était mauvais |
Valeur que vous souhaitez calculer
--Bon = 53,8% (car il y en a 7)
Il peut être calculé avec un tel SQL.
SELECT
TO_CHAR(
100.0 * SUM(CASE WHEN answer = 'C'était bien' THEN 1 ELSE 0 END) / COUNT(*),
'999.9%'
) AS "C'était bien",
TO_CHAR(
100.0 * SUM(CASE WHEN answer = 'habituellement' THEN 1 ELSE 0 END) / COUNT(*),
'999.9%'
) AS "habituellement",
TO_CHAR(
100.0 * SUM(CASE WHEN answer = 'C'était mauvais' THEN 1 ELSE 0 END) / COUNT(*),
'999.9%'
) AS "C'était mauvais"
FROM surveys
Résultat de sortie
C'était bien | habituellement | C'était mauvais | |
---|---|---|---|
1 | 53.8% | 30.8% | 15.4% |
--SUM (CASE WHEN answer = 'Good' THEN 1 ELSE 0 END)
compte combien de" bons "étaient. (7 ici)
COUNT (*)
(13 ici)TO_CHAR
(TO_CHAR (53.8461538, '999.9%')
→53.8%
)
--Calculer le pourcentage de "normal" et "mauvais" en utilisant la même procédureVous pouvez vérifier le résultat de l'exécution de SQL en accédant au site suivant et en cliquant sur le bouton "Exécuter".
https://rextester.com/XINWIX39774
Si vous l'implémentez avec Ruby on Rails, cela ressemble à ceci.
#Ecrire une clause SQL pour SELECT
sql = <<~SQL
100.0 * SUM(CASE WHEN answer = 'C'était bien' THEN 1 ELSE 0 END) / COUNT(*) AS good,
100.0 * SUM(CASE WHEN answer = 'habituellement' THEN 1 ELSE 0 END) / COUNT(*) AS fair,
100.0 * SUM(CASE WHEN answer = 'C'était mauvais' THEN 1 ELSE 0 END) / COUNT(*) AS bad
SQL
#Exécutez SQL pour obtenir la valeur
survey = Survey.select(sql)[0]
survey.good #=> 53.8461538
survey.fair #=> 30.7692308
survey.bad #=> 15.3846154
Explication supplémentaire
――Si vous changez l'alias de colonne en japonais, il ne sera pas compatible avec le programme, donc ici c'est bon / passable / mauvais.
Survey.select (sql) .first
, la clause ORDER BY sera ajoutée automatiquement et une erreur SQL se produira, alors j'ai osé la définir sur [0]
.De la section commentaires de cet article.
SELECT
TO_CHAR(
AVG(CASE WHEN answer = 'C'était bien' THEN 100 ELSE 0 END),
'999.9%'
) AS "C'était bien",
TO_CHAR(
AVG(CASE WHEN answer = 'habituellement' THEN 100 ELSE 0 END),
'999.9%'
) AS "habituellement",
TO_CHAR(
AVG(CASE WHEN answer = 'C'était mauvais' THEN 100 ELSE 0 END),
'999.9%'
) AS "C'était mauvais"
FROM surveys;
(Le résultat de l'exécution est le même que le texte ci-dessus)
SELECT
answer,
TO_CHAR(
100.0 * COUNT(*) / (SELECT COUNT(*) FROM surveys),
'999.9%'
) AS "rate"
FROM surveys
GROUP BY answer
ORDER BY rate DESC;
Résultat d'exécution
answer | rate |
---|---|
C'était bien | 53.8% |
habituellement | 30.8% |
C'était mauvais | 15.4% |
Recommended Posts