Requête MySQL avec UNION

Requête MySQL avec UNION - SQL/NoSQL - Programmation

Marsh Posté le 03-12-2006 à 13:57:49    

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

Code :
  1. (SELECT artiste, sum(hit) AS hit FROM tabstxt GROUP BY artiste ORDER BY hit DESC LIMIT $limite)
  2. UNION
  3. (SELECT artiste, sum(hit) AS hit FROM tabsgp GROUP BY artiste ORDER BY hit DESC LIMIT $limite)
  4. 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 ?
 
Après avoir trainer sur quelques forum, on me propose (non fontionnel) :

Code :
  1. SELECT artiste, 1, sum(hit) AS hit FROM tabstxt
  2. GROUP BY artiste, 1
  3. UNION
  4. SELECT artiste, 2, sum(hit) AS hit FROM tabsgp
  5. GROUP BY artiste, 2
  6. UNION
  7. SELECT a.artiste, 3, sum(a.hit + b.hit) as hit FROM tabstxt a join tabsgp b on
  8. a.artiste = b.artiste
  9. GROUP BY a.artiste, 3
  10. ORDER BY a.artiste, 002 DESC


 
 
Merci de vos réponses.
 
 
Guitariff.

Reply

Marsh Posté le 03-12-2006 à 13:57:49   

Reply

Marsh Posté le 03-12-2006 à 14:21:48    

Code :
  1. SELECT artiste, sum_tabstxt + sum_tabsgp
  2. FROM (SELECT artiste, sum(hit) as sum_tabstxt
  3.       FROM tabstxt
  4.       GROUP BY artiste
  5.       UNION ALL
  6.       SELECT artiste, sum(hit) as sum_tabsgp
  7.       FROM tabsgp
  8.       GROUP BY artiste)
  9. GROUP BY artiste
  10. ORDER BY artiste;

Reply

Marsh Posté le 03-12-2006 à 14:53:59    

Merci de ta réponse. J'ai malheureusement l'erreur suivante : Every derived table must have its own alias.
 
As-tu une petite idée de la solution ?

Reply

Marsh Posté le 03-12-2006 à 15:34:05    

Essaye comme ça :
 

Code :
  1. SELECT sub.artiste, sub.sum_tabstxt + sub.sum_tabsgp
  2. FROM (SELECT artiste, sum(hit) as sum_tabstxt
  3.       FROM tabstxt
  4.       GROUP BY artiste
  5.       UNION ALL
  6.       SELECT artiste, sum(hit) as sum_tabsgp
  7.       FROM tabsgp
  8.       GROUP BY artiste) as sub
  9. GROUP BY artiste
  10. ORDER BY artiste;

Reply

Marsh Posté le 03-12-2006 à 15:55:03    

Encore une erreur ...
#1054 - Unknown column 'sub.sum_tabsgp' in 'field list'  
 
Merci du temps que tu passes en tt cas.

Reply

Marsh Posté le 03-12-2006 à 16:25:56    

Désolé, j'ai pas de base sous la main ...
 
Mais essaye ça :
 

Code :
  1. SELECT sub.artiste, sum(sub.sum_tabs)
  2. FROM (SELECT artiste, sum(hit) as sum_tabs
  3.       FROM tabstxt
  4.       GROUP BY artiste
  5.       UNION ALL
  6.       SELECT artiste, sum(hit) as sum_tabs
  7.       FROM tabsgp
  8.       GROUP BY artiste) as sub
  9. GROUP BY artiste
  10. ORDER BY artiste;

Reply

Marsh Posté le 03-12-2006 à 16:27:31    

Ou encore, plus simplement :
 

Code :
  1. SELECT sub.artiste, sum(sub.hit)
  2. FROM (SELECT artiste, hit
  3.       FROM tabstxt
  4.       UNION ALL
  5.       SELECT artiste, hit
  6.       FROM tabsgp) as sub
  7. GROUP BY artiste
  8. ORDER BY artiste;

Reply

Marsh Posté le 03-12-2006 à 16:53:55    

<code>
  SELECT sub.artiste, sum( sub.hit ) AS hit2
  FROM (
   SELECT artiste, hit
   FROM tabstxt
   UNION ALL
   SELECT artiste, hit
   FROM tabsgp
  ) AS sub
   
  GROUP BY artiste
  ORDER BY hit2 DESC
  LIMIT $limite
</code>
 
fonctionne parfaitement.
 
Merci beaucoup Beegee !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed