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 :

Group by et opérateur mathématique


Sujet :

Langage SQL

  1. #1
    Membre éprouvé
    Homme Profil pro
    Indépendant X3 et SQL server
    Inscrit en
    Juillet 2006
    Messages
    865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Indépendant X3 et SQL server
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2006
    Messages : 865
    Points : 1 091
    Points
    1 091
    Par défaut Group by et opérateur mathématique
    je viens de trouver une requête select qui affiche la différence de 2 champs du group by
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select ref, val1 - val2 from articles
    group by ref, val1, val2

    Cela marche mais ma question est plus de compréhension par rapport au moteur:

    pour moi un group by utilise le champ groupé pour rapprocher des champs, genre un article et des quantités dans une table de mouvements articles.

    Donc là faire un regroupement sur 2 valeurs, j'ai du mal à voir comment se comporte le moteur de bdd. La en l'occurrence c est SQL server

    merci a tous

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Votre requête n'a aucun sens car la clause GROUP BY ne s'utilise qu'avec une opération d'agrégation comme MAX, AVG, COUNT SUM...

    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/ * * * * *

  3. #3
    Membre éprouvé
    Homme Profil pro
    Indépendant X3 et SQL server
    Inscrit en
    Juillet 2006
    Messages
    865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Indépendant X3 et SQL server
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2006
    Messages : 865
    Points : 1 091
    Points
    1 091
    Par défaut
    Je suis bien d'accord mais cette requête fonctionne. A titre d'information je ne l'ai pas écrite mais je l'ai trouvé directement dans l'applicatif, d'où mes interrogations.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Alors supprimez le GROUP BY qui n'a aucun intérêt. Beaucoup d'informaticien pensent naïvement qu'une clause GROUP BY fait un tri des données et l'utilise dans ce sens ce qui est évidemment totalement faux !
    le but de la clause group by est de faire des sous ensemble afin d'effectuer des calculs d'agrégation dans chacun des sous ensemble réalisé par le groupage. Bien entendu cela ne signifie en aucune manière que c'est un tri qui sera effectué car il existe différentes manières pour effectuer un calculs statistique dans un groupe, par exemple à l'aide d'une technique de hachage...

    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/ * * * * *

  5. #5
    Membre éprouvé
    Homme Profil pro
    Indépendant X3 et SQL server
    Inscrit en
    Juillet 2006
    Messages
    865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Indépendant X3 et SQL server
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2006
    Messages : 865
    Points : 1 091
    Points
    1 091
    Par défaut
    mes plus plates execuses mais j'ai oublié qu'il y avait bien un sum dans la requête qui est donc

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT ref, val1 - val2,sum(qty) FROM articles
    GROUP BY ref, val1, val2

    donc la question que je me posais c'étais le comportement du group by entre l'aggrégation et les valeurs val1 et val2

    sinon je suis plus admin SQL que développeur SQL

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Une "sous table" (groupe) est créée pour chaque occurrence des combinaisons de ref, val1 et val2 afin de faire l'agrégat dans chacune des sous tables.
    Vous pouvez aussi faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY  ref, val1 - val2
    ce qui bien évidemment ne donnera pas du tout le même résultat.

    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/ * * * * *

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    La syntaxe n'est pas fausse mais il faut, comme SQLPro le souligne, bien faire attention à son utilisation.

    La preuve par un exemple simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH Articles (val1, val2, qty) AS
    (
    SELECT 5, 3, 10 UNION ALL
    SELECT 6, 4, 15
    )
      SELECT val1 - val2 as diff,
             sum(qty) as qty_tot
        FROM articles
    GROUP BY val1, val2;
     
    diff        qty_tot
    ----------- -----------
    2           10
    2           15
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH Articles (val1, val2, qty) AS
    (
    SELECT 5, 3, 10 UNION ALL
    SELECT 6, 4, 15
    )
      SELECT val1 - val2 as diff,
             sum(qty) as qty_tot
        FROM articles
    GROUP BY val1 - val2;
     
    diff        qty_tot
    ----------- -----------
    2           25

  8. #8
    Membre éprouvé
    Homme Profil pro
    Indépendant X3 et SQL server
    Inscrit en
    Juillet 2006
    Messages
    865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Indépendant X3 et SQL server
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2006
    Messages : 865
    Points : 1 091
    Points
    1 091
    Par défaut
    Merci pour toutes ces réponses qui m'ont permis de cerner cette requête.
    En fait je ne savais que l'on pouvait mettre une formule dans le group by

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

Discussions similaires

  1. [AC-2010] Liste déroulante d'opérateurs mathématiques dans formulaire
    Par Cynthia67 dans le forum IHM
    Réponses: 4
    Dernier message: 07/02/2014, 12h56
  2. [2008] Stocker des opérateurs mathématiques
    Par hawksidu dans le forum Développement
    Réponses: 2
    Dernier message: 26/08/2013, 14h26
  3. fonctions de groupe et opérateurs ensemblistes
    Par new_wave dans le forum SQL
    Réponses: 1
    Dernier message: 05/11/2007, 17h52
  4. Réponses: 12
    Dernier message: 20/10/2006, 17h17
  5. Opérateur de concaténation avec GROUP BY
    Par kamaxime dans le forum Access
    Réponses: 2
    Dernier message: 26/04/2006, 15h14

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