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 :

Requête SQL avec UNION, sum et GROUP BY


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Requête SQL avec UNION, sum et GROUP BY
    Bonjour à tous,

    Dans l'idée, ma requête SQL est la suivante :

    (SELECT artiste, sum(hit) AS hit FROM tabstxt GROUP BY artiste ORDER BY hit DESC LIMIT $limite)
    UNION
    (SELECT artiste, sum(hit) AS hit FROM tabsgp GROUP BY artiste ORDER BY hit DESC LIMIT $limite)
    GROUP BY artiste sum(hit) as hit ORDER BY hit DESC LIMIT $limite


    Je souhaiterais donc qu'après que l'union ait été réalisé on groupe de nouveau par artiste puis qu'on récupère la somme des deux sum(hit) ...

    Avez-vous une petite idée de la syntaxe d'une requête valide ?


    Merci de vos réponses.


    Guitariff.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Un truc de ce genre
    J'essaierais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    (SELECT artiste, sum(hit) AS hit FROM tabstxt GROUP BY artiste ORDER BY hit DESC LIMIT $limite)
    UNION
    (SELECT artiste, sum(hit) AS hit FROM tabsgp GROUP BY artiste ORDER BY hit DESC LIMIT $limite)
    GROUP BY artiste sum(hit) as hit ORDER BY hit DESC LIMIT $limite
    UNION
    (SELECT a.artiste as TOTAL, sum(a.hit + b.hit)  FROM tabstxt a join tabsgp b on 
    a.artiste = b.artiste 
    GROUP BY a.artiste ORDER BY a.artiste DESC LIMIT $limite)

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    La requête ne fonctionne pas car :
    GROUP BY artiste sum(hit) as hit ORDER BY hit DESC LIMIT $limite
    n'est pas valide.

    A vrai dire je n'ai pas compris si la solution que tu me proposais était simplement la partie en rouge ou l'ensemble ...

    De plus à la fin, je souhaiterai un ORDER BY hit.

    Je pensais à :
    SELECT a.artiste as artiste, sum(a.hit + b.hit) as hit FROM tabstxt a join tabsgp b on
    a.artiste = b.artiste
    GROUP BY a.artiste ORDER BY hit DESC LIMIT $limite

    Le résultat est correcte (affichage artiste) mais la requete met un temps fou à s'éxécuter à car le sum est faux est la somme est extrèmement importante.

    Avez-vous une solution ?

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Union à 3 niveaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT artiste, 1, sum(hit) AS hit FROM tabstxt 
    GROUP BY artiste, 1
    
    UNION
    SELECT artiste, 2, sum(hit) AS hit FROM tabsgp 
    GROUP BY artiste, 2
    
    UNION
    SELECT a.artiste, 3, sum(a.hit + b.hit) as hit FROM tabstxt a join tabsgp b on 
    a.artiste = b.artiste 
    GROUP BY a.artiste, 3
    
    ORDER BY a.artiste, 002 DESC
    Je ne suis pas sûr que cette instruction soit supportée par ton SGBD,
    mais je pense que ça vaut la peine de l'essayer.
    Il faut tester tel quel, sans rien omettre. 1, 2 et 3 sont ici pour trier et
    grouper par ligne de chaque table.
    En outre, 002 veut bien dire" deuxième colonne de la clause SELECT".
    Indique donc 002 DESC dans la clause ORDER BY.

    C'est l'ensemble de la requête qu'il faut tester, bien entendu.

    Quel est le SGBD et sur quelle plate-forme tourne-t-il ?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse Mercure.

    La portion de code que tu m'as donné ne fonctionne pas ...
    Il s'agit d'une BDD MySQL qui tourne sous Linux (240 plan OVH).

    As-tu encore une petite idée ?

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    ça ne m'étonne qu'à moitié ! Mais, qu'est-ce qui ne fonctionne pas ?
    Il faut tout indiquer, tous les messages reçus et les coller ici.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Voici l'erreur :
    MySQL a réponduocumentation
    #1056 - Can't group on 'hit'

    Y-a-t il un problème avec le dernier sum ? Je vais faire quelques tests ... si vosu avez une idée.

Discussions similaires

  1. [MySQL-5.5] Requête SQL avec ORDER BY et GROUP BY
    Par Alexcontact dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/04/2014, 14h27
  2. Requête SQL avec Group By par semaine
    Par SOPSOU dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/07/2013, 22h20
  3. [AC-2003] Requête SQL avec SUM en fonction d'un attribut
    Par Linuss dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/05/2012, 09h10
  4. Réponses: 2
    Dernier message: 16/05/2012, 09h48
  5. [AC-2007] Requête sql avec union et format date
    Par keita00 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/03/2012, 17h19

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