Comment caluler le pourcentage du resultat dans la meme requete ? - SQL/NoSQL - Programmation
Marsh Posté le 04-04-2014 à 06:01:35
Hello
1) Le "Quantity" dans ta requête n'est pas dans une fonction d'aggrégation. D'ailleurs je suis surpris que ta requête ne provoque pas une erreur.
La règle c'est : quand on utilise une fonction d'aggrégation comme SUM, toutes les colonnes doivent faire partie d'une fonction d'aggrégation ou apparaître dans le GROUP BY.
2) Tu multiplies probablement un Int par un float (0.003). Il faut que tu convertisses pour garder une consistance dans ton opération. Par exemple avec CAST(SUM(Quantity) As float).
Ca donnerait la requête suivante :
Code :
|
Vérifie dans ta table le type de ta colonne Quantity. Si c'est un Int tu auras besoin de ce type de cast. Sinon il faudra voir en fonction du type de donnée.
Marsh Posté le 04-04-2014 à 13:51:32
Merci Yonel
j'ai essayer avec sqlfiddle ton code mais ca me fait une erreur
Citation : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'float) * 0.003 FROM History' at line 1: SELECT CAST(SUM(Quantity) As float) * 0.003 FROM History |
voici le lien direct
http://www.sqlfiddle.com/#!2/1c4d7/2
a tu une idée stp ?
merci beaucoup !
Marsh Posté le 04-04-2014 à 18:31:28
SELECT SUM(Quantity) * 0.3 |
Ca marche d'apres le fiddle (incluant plein de chiffres apres la virgule si besoin).
Note que c'est pas un probleme de SQL mais plutot de maths niveau primaire: pour avoir 30%, tu essayais de diviser par 3??
Par contre je suis egalement tres surpris, comme Yonel, que
SELECT Quantity, |
marche egalement. C'est vraiment valide ca sous MySQL?? Pas sur que ca respecte la norme alors que c'est assez basique, et v'la les incomprehensions que ca doit generer pour des debutants.
Marsh Posté le 07-04-2014 à 08:33:13
marcelpagol a écrit : Merci Yonel
|
Alors j'ai regardé ton sqlfiddle :
1) Mauvais typage de données. Pour toi une quantité ça devrait être du text ? Pour moi c'est un nombre donc plutôt int, float, decimal, etc. A moins que tu aies une contrainte très étrange pour ton modèle ?
2) En mettant un typage correct et en appliquant SUM(Quantity) * 0.003 tu as bien la valeur qu'il te faut
Dernier point :
A mon avis SELECT Quantity, SUM(Quantity) FROM History; fonctionne uniquement sur sqlfiddle. Mais je pense que c'est un bug de l'outil, ça m'étonnerait que MySQL autorise ça.
Le résultat n'a d'ailleurs aucun sens :
QUANTITY SUM(QUANTITY) * 0.003
100 0.9
Tu comprends pourquoi tu peux pas mettre Quantity directement avec ta fonction d'aggrégation SUM ?
Marsh Posté le 07-04-2014 à 10:49:31
un simple "select sum(quantity) * 0.03 from history" devrait fonctionner quelque soit la base de donnée utilisée. ( ou 0,03 si le système de chiffres est codé en français )
Marsh Posté le 07-04-2014 à 17:06:20
C'est marrant ce thread, parce que tous les intervenants se sont plantés sur le coefficient.
marcelpagol demande 0.30 %.
Donc c'est ni 003 (marcelpagol), ni 0.3 (lasnoufle), ni 0.03 (ddr555).
Le coefficient à utiliser c'est 0.003 pour avoir 0.30 %.
Marsh Posté le 07-04-2014 à 22:40:25
oui c'est vrai que le résultat n'avais aucun sens mais d’après le code de ddr555 et le coefficient de Yonel je mis retrouve parfaitement
Code :
|
j'avais tester aussi avec le même coefficient * 0.003 mais ma requête était pas la bonne donc c'est pour ça
merci beaucoup les gars
Marsh Posté le 08-04-2014 à 14:23:43
Yonel a écrit : C'est marrant ce thread, parce que tous les intervenants se sont plantés sur le coefficient. |
Bordel Ca m'apprendra a lire.
Marsh Posté le 15-04-2014 à 10:32:18
le genre de chose qu'on remarque en 2 secondes une fois qu'on fait la requête. l'important c'est d'avoir le bon sql. moi je préférais calculer 3% !
Marsh Posté le 04-04-2014 à 01:13:03
Bonjours a la communauté,
je suis débutant en sql est je n'arrive pas a trouver a calculer 0.30 % de la somme de cette requete
j'ai bien le montant , mais comment faire pour que cette requête affiche 0.30% de la somme ?
voici la "structure" de ma table (Table = History )
--------
Columns=Quantity
--------
Row 1=100
Row 2=50
Row 3=60
Row 4=10
Row 5=70
Row 6=10
somme = 300 et j'ai besoin de 0.30% de 300
j'ai essayer mais le resultat ne fonctionne pas
vous avez une idée s'il vous plait ?
merci beaucoup
Message édité par marcelpagol le 04-04-2014 à 03:00:15