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

Requêtes PostgreSQL Discussion :

Erreur avec ::numeric dans une requête


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    mars 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : mars 2021
    Messages : 25
    Points : 14
    Points
    14
    Par défaut Erreur avec ::numeric dans une requête
    Bonjour,
    je dois faire une requete pour avoir une moyenne, je fais une division en regroupant les doublon d'une colonne, j'ai comme résultat un entier, je voudrais avoir deux chiffres après la virgule, j'ai ajouté à mon opération ::NUMERIC(3, 2), j'ai une erreur que numeric doit être supérieur à 10^1.
    Ma requête marche si je supprime(3, 2) mais j'ai trop de chiffres derrière la virgule.

    Voici ma requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select (count(*) /(count (distinct id_auditeur) :: NUMERIC(3, 2)))
    from inscrire
    where annee = 2005
    je vous remercie pour votre aide.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 076
    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 : 7 076
    Points : 22 460
    Points
    22 460
    Billets dans le blog
    2
    Par défaut
    bonjour,

    Comme ceci :

    select round(cast(count(*) as decimal(5, 2))/cast(count(distinct id_auditeur) as decimal(5, 2)), 2)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    mars 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : mars 2021
    Messages : 25
    Points : 14
    Points
    14
    Par défaut message erreur
    Bonjour,
    je vous remercie pour votre aide. Si je comprends bien on ne peut pas faire la conversion à la suite de cette division.
    merci

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    7 076
    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 : 7 076
    Points : 22 460
    Points
    22 460
    Billets dans le blog
    2
    Par défaut
    Il y a bien un transtypage puis un arrondi à deux décimales après la division

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    avril 2002
    Messages
    5 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2002
    Messages : 5 903
    Points : 22 877
    Points
    22 877
    Par défaut
    COUNT retournant un entier, si vous faites la division des deux COUNT, vous ferez une division entière, qui renvoie un entier. Il faut donc transtyper au niveau de chaque terme de la division puis arrondir, comme indiqué par escartefigue.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    mars 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : mars 2021
    Messages : 25
    Points : 14
    Points
    14
    Par défaut message erreur
    merci pour votre aide
    bonne soirée

  7. #7
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    mai 2008
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2008
    Messages : 222
    Points : 408
    Points
    408
    Par défaut
    Caster l'un des deux membres en Decimal ou Numeric est suffisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT round(count(*)::decimal/count(distinct id_auditeur), 2)
    FROM inscrire
    WHERE annee = 2005

  8. #8
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 719
    Points : 49 089
    Points
    49 089
    Billets dans le blog
    1
    Par défaut
    Plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select CAST(1.0 * count(*) /count (distinct id_auditeur) AS NUMERIC(3, 2))
    from inscrire
    where annee = 2005
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre à l'essai
    Homme Profil pro
    Autre
    Inscrit en
    mars 2021
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : mars 2021
    Messages : 25
    Points : 14
    Points
    14
    Par défaut message erreur
    Bonjour,
    je vous remercie
    bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec like dans une requête SQL
    Par Boublou dans le forum SQL
    Réponses: 2
    Dernier message: 16/08/2007, 15h46
  2. Erreur de syntaxe dans une requête SQL
    Par amnesias dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2007, 12h50
  3. [8i][PL/SQL] erreur avec lpad dans une fonction
    Par sali dans le forum Oracle
    Réponses: 3
    Dernier message: 16/03/2006, 06h22
  4. Réponses: 6
    Dernier message: 29/11/2005, 19h36
  5. Erreur d'agrégation dans une requête UNION
    Par soso78 dans le forum Access
    Réponses: 2
    Dernier message: 05/10/2005, 00h11

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