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

Langage SQL Discussion :

SELECT AVG - Renvoyer toutes les colonnes


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut SELECT AVG - Renvoyer toutes les colonnes
    Bonjour à toutes et à tous,

    Tout d'abord, une présentation rapide : Je travaille en tant que CP AMOA et j'apprécie l'opérationnelle. C'est pour cela qu'il m'arrive d'aller fouiller dans les base de données en utilisant le SQL.
    Mais là je bloque et m'interroge sur une requête.

    Je souhaiterais faire une moyenne de prix de vente. Pour cela j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT AVG (pxvente)
    FROM ARTPXVTE
    WHERE IDARTICLE ='13510' ;

    Jusqu'ici, tout va bien. Cependant, j'aimerais afficher toutes les autres colonnes comme la date de début, libellé article....et éviter de mettre tous les champs dans mon SELECT.

    Avez-vous une idée?

    Merci.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Tu ne nous dis pas comment est lancée la requête (ni sur quel SGBD), donc je réponds peut-être à côté.
    Si elle est lancée via une application, le plus simple est de passer par une requête dynamique.

    Sinon il faut te "palucher" toutes les colonnes dans le SELECT ET dans le GROUP BY.

    Tatayo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Ca n'a pas de sens fonctionnellement : si la table article contient le prix de vente de chaque article, soit on récupère le code article, le libellé et le prix de vente pour chaque article, soit on ne récupère que le prix de vente moyen, mais évidemment sans code article ni libellé
    A moins que vous ne souhaitiez répéter pour chaque ligne article le prix moyen tous articles confondus sur toutes les lignes ?

    Auquel cas comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select AR_refeference, AR_libelle, AR_...., avg(AR_prixvte) over()
    from AR_article

  4. #4
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour vos retours.

    Nous utilisons SQL DEVELOPER. L'idée de base était d'éviter de saisir tous les champs voulus dans mon SELECT.

    Pour chaque ligne, le souhait est d'avoir tous les champs de la table avec le prix moyen de chaque article.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Si on parle de prix moyen de chaque article, c'est donc que le prix de vente n'est pas celui de la table article, il y a plusieurs prix pour un article.
    Il faut donc la description de la table dans laquelle se trouve ce prix pour savoir comment faire la jointure.
    Et également la description de la table article.

    Même si ça peut paraître fastidieux, il est préférable de citer une a une chaque colonne requise pour la requête, ça évite d'encombrer inutilement le réseau.

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    Voici une proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT IDARTICLE, COL2, COL3 , AVG (pxvente) PRIX_MOYEN
    FROM ARTPXVTE
    GROUP BY IDARTICLE, COL2, COL3 
    ;
    Dans ce cas précis, vous ne pouvez pas faire autrement que de citer les colonnes une par une.
    Rien ne sert de courir, il faut partir à point.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    @samanta : cette proposition ne convient pas puisque Glengrand a précisé

    Pour chaque ligne, le souhait est d'avoir tous les champs de la table avec le prix moyen de chaque article
    C'est donc, come je le disais plus haut, qu'il y a plusieurs prix pour un même article, il faut donc faire une jointure avec une autre table

    Ce sera plutôt une requête du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select AR_reference
         , AR_designation       
         , coalesce(avg(VT_prix), 0) as prix_moyen
    from AR_article    AR
    left join VT_vente VT
       on VT.AR_ident=AR.AR_ident
    group by AR_reference
           , AR_designation
    Il faut une jointure OUTER si on veut conserver les articles qui n'ont jamais été vendus

    Et si on veut une vraie moyenne, il faudrait tenir compte de la quantité...
    Donc à voir selon le résultat attendu

  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
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Pour une moyenne des prix de vente il faut travailler sur la table des lignes de vente et non sur la table des produits en vente.

    En effet en général on n'a qu'un seul prix de vente d'un produit. Et même si l'on avait différents prix de vente, il faudrait moduler ce prix en fonction du nombre de ventes.

    Il faut donc faire le ratio suivant :
    Prix de vente moyen = SUM(prix_vendu) / COUNT(quantité_vendue)

    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
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2021
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Un grand merci à tout le monde pour vos retours.

    Toutes les solutions ont été testées et cela m'a permis de mener une bonne analyse.

    À très vite.

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

Discussions similaires

  1. [12c] SELECT de toutes les colonnes sauf une
    Par Ikebukuro dans le forum SQL
    Réponses: 10
    Dernier message: 19/06/2019, 16h21
  2. Réponses: 1
    Dernier message: 28/07/2006, 03h57
  3. Réponses: 11
    Dernier message: 14/12/2005, 13h45
  4. renvoyer toutes les section d'un fichier .ini
    Par user_steph dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/07/2005, 16h06
  5. Toutes les colonnes d'une BDD
    Par mohamed dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/09/2004, 14h12

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