Sous-requêtes dans la clause FROM

Il est possible de raffiner progressivement une requête en enchaînant les questions dans la clause FROM.

Syntaxe

CTRL+C pour copier, CTRL+V pour coller
1
SELECT ... FROM 
2
(SELECT ... 
3
FROM ... 
4
WHERE ...) 
5
WHERE ...
SELECT ... FROM 
(SELECT ... 
FROM ... 
WHERE ...) 
WHERE ...

RemarqueSous-sous requête

Il est possible d'imbriquer successivement plusieurs sous-requêtes.

CTRL+C pour copier, CTRL+V pour coller
1
SELECT ... FROM 
2
(SELECT ... FROM 
3
  (SELECT... 
4
  FROM ...
5
  WHERE)
6
WHERE ...) 
7
WHERE ...
SELECT ... FROM 
(SELECT ... FROM 
  (SELECT... 
  FROM ...
  WHERE)
WHERE ...) 
WHERE ...

SyntaxeJointure de sous-requêtes

Il est possible de faire le produit ou la jointure de sous-requêtes.

CTRL+C pour copier, CTRL+V pour coller
1
SELECT ... FROM 
2
(SELECT ... FROM 
3
WHERE...)
4
(SELECT ... FROM 
5
WHERE...)
6
WHERE ...
SELECT ... FROM 
(SELECT ... FROM 
WHERE...)
(SELECT ... FROM 
WHERE...)
WHERE ...

Méthode

Cette extension est particulièrement utile pour les calculs d’agrégat après filtrage ou pour enchaîner les calculs d’agrégat (par exemple pour faire la moyenne de comptage après regroupement).

ExempleEnchaînement de calculs d'aggrégat

CTRL+C pour copier, CTRL+V pour coller
1
select avg(c) from (select count(b) as c from t group by a)
select avg(c) from (select count(b) as c from t group by a)

ExempleCalcul de la moyenne des ventes par jour de la semaine

CTRL+C pour copier, CTRL+V pour coller
1
SELECT avg(q) FROM
2
(SELECT jds AS jds, COUNT(*) AS q
3
FROM ventes v
4
GROUP BY jds)
SELECT avg(q) FROM
(SELECT jds AS jds, COUNT(*) AS q
FROM ventes v
GROUP BY jds)