J'ai des problèmes avec une requête requise dans un projet sur un site Web d'apprentissage en ligne. Avoir une base de données qui ressemble à ceci:
J'ai besoin d'exécuter la requête suivante: p>
retourne une chaîne de requête SQL qui trouvera le sport qu'un pays a a remporté les médailles. Il devrait inclure le nombre de médailles, aliasrés comme "chef", ainsi que le pourcentage de victoires de ce pays, le sport représente, aliasé comme «pour cent». Éventuellement commandé par le champ donné dans la direction spécifiée. P>
J'ai la partie filtrante résolue. Pour la première partie, compte tenu d'un pays 'Norvège', j'ai: p> Je ne sais pas comment coder le pourcentage de la partie. Je sais que j'ai besoin d'en quelque sorte résumer la totalité des lignes pour chaque sport, puis calculer, mais j'ai des problèmes avec les sous-requêtes. Voici un que j'ai essayé, ce qui ne fonctionne pas: p> modifier: résolu. P> SELECT SPORT,
COUNT(*),
COUNT(*)*100/(SELECT COUNT(*)
FROM GOLDMEDAL
WHERE COUNTRY = 'Norway')
FROM GOLDMEDAL
WHERE COUNTRY = 'Norway'
GROUP BY SPORT;
3 Réponses :
Vous pouvez utiliser ci-dessous Query -
SELECT SPORT, COUNT(*) as count, (COUNT(*)*100)/(SELECT COUNT(*) FROM GOLDMEDAL) as percent FROM GOLDMEDAL WHERE COUNTRY = "Norway" GROUP BY SPORT;
Hé ankit! Corrigez-moi si je me trompe, mais je pense que la sous-requête doit également filtrer pour le pays demandé, sinon il calculera le pourcentage de ce sport du pays sur toutes les médailles gagnées par tous les pays. J'ai posté la solution que j'ai obtenue, merci beaucoup!
Au-dessous de la requête vous aidera à répondre à l'exigence
select sport,count(*) as count,(count(*)*100)/(Select count(*) from goldmedal where country = "Norway") as percent from goldmedal where country = "Norway" group by sport;
La meilleure façon de faire cela utilise les fonctions de la fenêtre, pas sous-requêtes:
SELECT sport, COUNT(*) as count, (COUNT(*) * 100.0 / SUM(COUNT(*)) OVER ()) as percent FROM GOLDMEDAL WHERE COUNTRY = 'Norway' GROUP BY SPORT ORDER BY percent DESC;