Sum de 2 chiffres decimales

Hugo_6404 Messages postés 1 Date d'inscription samedi 11 janvier 2020 Statut Membre Dernière intervention 11 janvier 2020 - Modifié le 12 août 2020 à 21:54
jacofee Messages postés 12 Date d'inscription mercredi 12 août 2020 Statut Membre Dernière intervention 16 août 2020 - 12 août 2020 à 18:22
Bonjour, je suis débutant en sql
Lorsque je fais une requête:
Sélect sum(prix) from forfait where nom="adulte" or nom="enfant" group by station


Ca additionne le prix du forfait enfant et du forfait adulte pour chaque station mais le résultat donné est faux... par exemple j'ai 17.50 et 20,50 et ça m'affiche 37 au lieu de 38...
Pk?
Merci d'avance

1 réponse

Whismeril Messages postés 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 14 avril 2024 655
12 janv. 2020 à 09:21
Bonjour

pour tes prochains posts, merci de lire et d'appliquer ce qui est décrit là https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Je sql c'est pas mon trip, mais ça ressemble à un problème de type.

Option 1 prix est de type int, quand tu as rentré 17.50, il a stocké 17, et pour 20.50 il a stocké 20.
Option 2, Sum retourne fait la somme d'entiers donc pour 17.50 il prend 17 et pour 20.50 il prend 20.
Et 20 + 17 = 37

Ayant trouvé des exemples sur le net ou Sum retourne un nombre décimal, je pencherais pour l'option 1
0
jacofee Messages postés 12 Date d'inscription mercredi 12 août 2020 Statut Membre Dernière intervention 16 août 2020 1
12 août 2020 à 18:22
Bonjour,

Le langage SQL permet de spécifier une expression en paramètre des fonctions d'agrégation à la condition que cette expression soit un scalaire dont le type est compatible avec l'opération réalisée (ex : un numérique pour SUM, mais presque tout ce que l'on veut pour MAX).
La fonction SUM retourne des valeurs du type de l'expression qui lui est passée en paramètre. Si le résultat de l'expression est de type entier, SUM retournera un entier pour chaque ligne du dataset obtenu. Le type de la valeur résultant d'une expression est déterminé selon des règles assez complexes. Il se peut que ce résultat soit un entier si l'expression contient au moins un entier. Par exemple si l'on vend des boîtes de conserve, le prix d'une commande sera donné par le nombre de boîtes multiplié par leur prix unitaire. Si on commande de la sauce tomate et de la choucroute, le prix total est donné par la somme des deux produits. Les nombres de boîtes étant des entiers, le résultat pourrait, je dis bien pourrais, être de type entier avec la troncature que l'on constate dans la question posée par Hugo. Pour éviter ce genre de problème, il est bon de faire des conversions de type explicite ou de n'utiliser que des colonnes de même type.
La conversion d'un type à l'autre est réalisée par des fonctions dont la signature dépend du dialecte SQL utilisé. Pour cela on se référera à la documentation du SGBD.

Cordialement,
0