Comment caluler le pourcentage du resultat dans la meme requete ?

Comment caluler le pourcentage du resultat dans la meme requete ? - SQL/NoSQL - Programmation

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

Code :
  1. SELECT  Quantity,
  2. SUM(Quantity)
  3. FROM    History;


 
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

Code :
  1. SELECT  Quantity,
  2. SUM(Quantity)/ 003 (ou 03 et 0003  mais ca marche pas correctement)
  3. FROM    History;


 
vous avez une idée s'il vous plait ?
merci beaucoup :)


Message édité par marcelpagol le 04-04-2014 à 03:00:15
Reply

Marsh Posté le 04-04-2014 à 01:13:03   

Reply

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 :
  1. SELECT  CAST(SUM(Quantity) As float) * 0.003
  2. FROM    History;


 
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.


Message édité par Yonel le 04-04-2014 à 06:11:37
Reply

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 !

Reply

Marsh Posté le 04-04-2014 à 18:31:28    

SELECT  SUM(Quantity) * 0.3
FROM    History;

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,
SUM(Quantity)
FROM    History;

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.


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 07-04-2014 à 08:33:13    

marcelpagol a écrit :

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 !


 
Alors j'ai regardé ton sqlfiddle :
 
1) Mauvais typage de données. Pour toi une quantité ça devrait être du text ?  :heink: 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 ?

Reply

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 )


Message édité par ddr555 le 07-04-2014 à 10:50:42
Reply

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 %.  :D

Reply

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 :
  1. select sum(quantity) * 0.003 from history


 
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 :)  
 

Reply

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.
 
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 %.  :D


Bordel  [:prozac] Ca m'apprendra a lire.


---------------
C'était vraiment très intéressant.
Reply

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% ! :D


Message édité par ddr555 le 15-04-2014 à 10:32:40
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed