Maison > base de données > tutoriel mysql > Pourquoi la division entière PostgreSQL renvoie-t-elle des résultats incorrects ?

Pourquoi la division entière PostgreSQL renvoie-t-elle des résultats incorrects ?

Linda Hamilton
Libérer: 2024-12-27 22:58:12
original
402 Les gens l'ont consulté

Why Does PostgreSQL Integer Division Return Incorrect Results?

Problème de division dans PostgreSQL : pourquoi la division (/) renvoie des résultats incorrects

Lorsqu'ils tentent de calculer des divisions avec des colonnes entières dans PostgreSQL, les utilisateurs peuvent rencontrer des résultats inattendus. Considérons le scénario suivant :

Problème :

Une table nommée "software" contient les colonnes "dev_cost" et "sell_cost". Vous souhaitez déterminer la quantité de logiciels qui doit être vendue pour récupérer le dev_cost. Étant donné que "dev_cost" vaut 16 000 et "sell_cost" vaut 7 500, vous vous attendez à ce que le résultat soit 3. Cependant, la requête

select dev_cost / sell_cost from software;
Copier après la connexion

renvoie 2 à la place.

Cause :

PostgresSQL effectue une division entière, ce qui tronque le résultat vers zéro. Puisque "dev_cost" et "sell_cost" sont définis comme des entiers, le résultat est tronqué à 2.

Solution :

Pour obtenir le résultat correct, au moins un L'opérande doit être converti en un type à virgule flottante, tel que float ou décimal. Ceci peut être réalisé en utilisant la fonction cast() ou le double deux-points :: opérateur:

select cast(dev_cost as decimal) / sell_cost from software;
Copier après la connexion

ou

select dev_cost::decimal / sell_cost from software;
Copier après la connexion

Alternativement, vous pouvez arrondir le résultat à l'entier le plus proche en utilisant le plafond() fonction :

select ceil(dev_cost::decimal / sell_cost) from software;
Copier après la connexion

Démo :

[Démo SQLFiddle](https://www.sqlfiddle.com/#!17/23da8/1)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal