IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

Problème avec SUM


Sujet :

SQL Firebird

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2016
    Messages : 9
    Points : 27
    Points
    27
    Par défaut Problème avec SUM
    Delphi XE8 Entreprise , FireBird 4.00 , Windows 11

    Avec FireBird
    Les fonctions SUM, AVG me génèrent une erreur

    J'ai testé sur Flamerobin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SUM(a.SALARY)
    FROM EMPLOYEE a ;
    j'ai le message d'erreur :
    Error IBPP logicException
    Context RowImpl AlloVariables
    Message Found an unknown sqltype

    avec les fonctions MIN, MAX, COUNT pas de problème.

    Avec Firedac pas de message d'erreur, mais le champ est vide.

    Quelqu'un a-t-il eu le même problème ?
    Est-ce que cela viendrait de la version Firebird 4.00
    Merci de votre expérience.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 206
    Points : 12 787
    Points
    12 787
    Par défaut
    Bonjour,
    Quel est le type de données de EMPLOYE.SALARY ?
    Les fonctions MIN, MAX et COUNT peuvent être utilisées avec "n'importe" quel type de colonne (numérique, chaîne, date...) alors que SUM et AVG ne fonctionnent qu'avec des numériques.

    Tatayo.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2016
    Messages : 9
    Points : 27
    Points
    27
    Par défaut
    Le type de données est numeric(10.2) . C'est la BDD de test. Sur ma BDD de travail les données sont de type Decimal(18.2).
    D'après la doc les types sont corrects.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 157
    Points : 38 963
    Points
    38 963
    Billets dans le blog
    9
    Par défaut
    Essayez en convertissant le résultat dans du décimal (34,2) : select cast(sum (a.salary) as decimal(34,2))

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2016
    Messages : 9
    Points : 27
    Points
    27
    Par défaut
    J'ai essayé select cast(sum (a.salary) as decimal(34,2))
    la méme erreur.

    Malgré ce que dit la documentation

    The result type of SUM depends on the input type:
    FLOAT, DOUBLE PRECISION DOUBLE PRECISION
    SMALLINT, INTEGER BIGINT
    BIGINT, INT128 INT128
    DECIMAL/NUMERIC(p, n) with p < 10 DECIMAL/NUMERIC(18, n)
    DECIMAL/NUMERIC(p, n) with p >= 10 DECIMAL/NUMERIC(38, n)
    DECFLOAT(16), DECFLOAT(34) DECFLOAT(34)

    SUM fonctionne avec les Integer, les float, mais pas avec Decimal et numeric

    par contre, en "castant" ça fonctionne :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SUM( CAST(a.TST_CUR as FLOAT))
    FROM TEST_DEST a ;
    Avec la table de démo :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SUM(CAST( a.SALARY as FLOAT)) as Somme
    FROM EMPLOYEE a ;
    résultat : 16203468.015625

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SUM(CAST( a.SALARY as INTEGER)) as Somme
    FROM EMPLOYEE a ;
    résultat : 16203471

    NB : j'utilise Decimal pour des données Currency

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 157
    Points : 38 963
    Points
    38 963
    Billets dans le blog
    9
    Par défaut
    Evidemment : imbécile que je suis, j'avais mal placé le cast , vous avez corrigé de vous même

    Utiliser du DECIMAL pour un montant est tout à fait normal, FLOAT étant imprécis sur la partie décimale

    Note : pensez à utiliser les balises CODE (bouton # de la barre d'icones) pour encadrer le code, c'est plus facile à lire
    Là j'ai corrigé votre message pour les ajouter, mais n'oubliez pas pour vos prochains échanges

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2016
    Messages : 9
    Points : 27
    Points
    27
    Par défaut
    Merci pour vos échanges.

    Je prends note de la subtilité pour utiliser SUM avec des types Numeric et Decimal.

    En re-transtypant en Currency je retrouve mes infos sans problème et les calculs sont justes.

    Pour ce qui est de la mise en forme, c'est vrai que c'est plus présentable.

    Le prochain coup je ferai un effort. (je n'ai pas l'habitude)

Discussions similaires

  1. Comment formater le resultat avec 2 chiffres avec SUM de SQL
    Par sondo dans le forum Bases de données
    Réponses: 15
    Dernier message: 23/06/2006, 14h41
  2. [SQLServer] Requête avec SUM
    Par FzF dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/05/2006, 16h19
  3. Réponses: 3
    Dernier message: 22/12/2005, 17h47
  4. [SQL Access] Problème avec Sum()
    Par badgam piero dans le forum Access
    Réponses: 5
    Dernier message: 12/12/2005, 16h00
  5. Pb récupération d'une somme avec SUM()
    Par momo99 dans le forum InterBase
    Réponses: 3
    Dernier message: 01/11/2005, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo