Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1237 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Comment caluler le pourcentage du resultat dans la meme requete ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment caluler le pourcentage du resultat dans la meme requete ?

n°2224078
marcelpago​l
Posté le 04-04-2014 à 01:13:03  profilanswer
 

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
mood
Publicité
Posté le 04-04-2014 à 01:13:03  profilanswer
 

n°2224081
Yonel
Monde de merde !
Posté le 04-04-2014 à 06:01:35  profilanswer
 

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
n°2224108
marcelpago​l
Posté le 04-04-2014 à 13:51:32  profilanswer
 

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 !

n°2224144
lasnoufle
La seule et unique!
Posté le 04-04-2014 à 18:31:28  profilanswer
 

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.
n°2224264
Yonel
Monde de merde !
Posté le 07-04-2014 à 08:33:13  profilanswer
 

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 ?

n°2224274
ddr555
Posté le 07-04-2014 à 10:49:31  profilanswer
 

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
n°2224333
Yonel
Monde de merde !
Posté le 07-04-2014 à 17:06:20  profilanswer
 

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

n°2224347
marcelpago​l
Posté le 07-04-2014 à 22:40:25  profilanswer
 

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

n°2224410
lasnoufle
La seule et unique!
Posté le 08-04-2014 à 14:23:43  profilanswer
 

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.
n°2225099
ddr555
Posté le 15-04-2014 à 10:32:18  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Comment caluler le pourcentage du resultat dans la meme requete ?

 

Sujets relatifs
Formulaire de questions pour un résultat en fonction des réponsesRequête SQL basée sur paramètre et table un peu étrange
Réponse "asp" à une une requete sqlDélai dépassé sur Requète SQL
[SQL] Quand une des condition est dans le résultatoptimisation requete fgets
Requête auto et envoie en mail[RESOLU] REQUETE SQL AVEC ID ET ORDER
SqL - requête que designe 2.314424e+069
Plus de sujets relatifs à : Comment caluler le pourcentage du resultat dans la meme requete ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR