Donc ce que je veux faire:Comment puis-je réécrire cette requête sans sous-requêtes?
J'ai une table qui a quelques prix de certains articles d'un magasin, ce que je veux faire est de trouver le prix moyen de tous les articles vendus à partir de ce magasin, ET le somme de tous les articles similaires vendus en magasin.
Mes colonnes sont:
- No_article
- branche
- TotalAmount
Ce qui est vraiment important est que je dois éviter les sous-requêtes, donc je ne pouvais pas faire quelque chose comme :
SELECT DISTINCT branch AS postcode, item_no, avg_price
FROM Prices
NATURAL JOIN (SELECT branch, AVG(totalamount) avg_price FROM Prices GROUP BY branch) av
WHERE sum > avg_price ORDER BY turnover DESC , branch;
Ce qui fait exactement ce que je veux faire, néanmoins je dois le faire sans sous-requêtes.
modifier 1 QUESTION:
Y AT-IL UNE DIFFÉRENCE entre les tables dérivées et temporaires? donc pour l'affectation, je ne suis pas autorisé à utiliser des sous-requêtes, ou des tables temporaires, donc ma réponse a-t-elle l'une de ces 2?
Pour le prix moyen par branche, vous pouvez utiliser un autojointure et GROUP BY au lieu d'une sous-requête. Mais ce n'est pas clair pour moi ce que le reste fait ... quelle est la relation entre item_no et avg_turnover? Quelle est la clé primaire? Pouvons-nous voir le schéma? – bobince
@Sam ... À noter: Ce que vous utilisez s'appelle des tables dérivées. Les sous-requêtes sont des instructions Select faisant partie de l'emplacement ou de la colonne. Pensez aux tables dérivées comme sélectionnant à partir d'une vue non indexée. –
Pour quelle base de données? Bien qu'il soit probablement MySQL ... –