Je pense que ta question est justifiée, mais en fait je crois que c'est juste du à une erreur de copier/coller (décidemment
)
Il faudrait plutot lire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| SELECT t1.id
, t1.niv
, t2.qte
FROM ( SELECT id
, MIN(machin) AS niv
FROM table1
GROUP BY id
) AS t1
INNER JOIN
( SELECT id
, SUM(truc) AS qte
FROM table2
GROUP BY id
) AS t2
ON t1.id = t2.id
; |
Une fois ces petites corrections effectuées, expliquons les différences entre la requete avec tables dérivées d'al1_24 et ta requete AL1986.
La plus simple (AL1986) consiste à créer 2 agrégats avec des données d'une seule table. Dans tous les cas, il n'existe qu'une table.
Dans la requete avec tables dérivées, il existe au départ 2 tables différentes (table1 et table2). Nous en créons 2 nouvelles (t1 et t2) et effectuons une jointure sur t1 et t2.
L'avantage est alors de créer des agrégats sur un meme champ (id ou no_dossier), mais avec des données de 2 tables. (ce que je cherchais)
Al1_24, ai-je bien compris ta leçon ?
NB : on peut aussi bien sûr ajouter des champs, même d'autres tables, en ajoutant donc le nom des tables appelées (bien les sortir des parenthèses), et en créant la liaison avec la table principale (WHERE table1.couleur=table4.couleur ).
Un autre point intéressant : avec cette technique, il n'est pas nécessaire de recopier dans la clause groupby générale tous les champs qu'on aura ajoutés dans le select (puisque les GroupBy ne sont que des petits, dans les requetes imbriquées). (cf le problème du début de cette discussion)
J'espère que ca s'est éclairci.
Sinon à bientôt !
Partager