0
votes

Comment puis-je calculer le pourcentage, pour chaque ligne, de la somme du nombre (*) dans une requête groupée? - SQL

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:

 Structure de base de données, SQLite P>

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> xxx pré>

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> xxx pré>

modifier: résolu. P>

SELECT SPORT, 
       COUNT(*), 
       COUNT(*)*100/(SELECT COUNT(*) 
                     FROM GOLDMEDAL 
                     WHERE COUNTRY = 'Norway') 
FROM GOLDMEDAL 
WHERE COUNTRY = 'Norway' 
GROUP BY SPORT;


0 commentaires

3 Réponses :


0
votes

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;


1 commentaires

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!



0
votes

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;


0 commentaires

0
votes

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;


0 commentaires