Et je souhaite déterminer quelle est la catégorie de produit la plus vendue par année (en nombre d’articles vendus).
Voici une requête qui fonctionne mais m'affiche toutes la catégories pour chaque année alors que veux uniquement celles avec le plus de produits vendus.
SELECT DISTINCT EXTRACT(YEAR FROM orders.order_date) AS année,
categories.category_name AS nom_de_catégorie,
SUM(order_details.quantity) AS nombre_produits_vendus
FROM categories
INNER JOIN products
ON products.category_id = categories.category_id
INNER JOIN order_details
ON order_details.product_id = products.product_id
INNER JOIN orders
ON orders.order_id = order_details.order_id
GROUP BY EXTRACT(YEAR FROM orders.order_date), categories.category_id
ORDER BY EXTRACT(YEAR FROM orders.order_date), SUM(order_details.quantity) DESC;
En fait il faudrait le MAX() de nombre_produits_vendus rattaché à sa catégorie correspondante. Mais il est impossible d'appliquer un MAX() à SUM()...
J'ai tenté avec une sous requête mais je n'ai pas réussi (j'en ai jamais utilisé auparavant)
Tu peux utiliser un INNER JOIN sur le MAX (en remplaçant le contenu du 1er SELECT par le tien) :
SELECT t1.nombre_produits_vendus, t1.annee, t1.nom_de_categorie
FROM mysql_test_a t1
INNER JOIN (
SELECT MAX(nombre_produits_vendus) as nbmax
FROM mysql_test_a
) t2
ON t1.nombre_produits_vendus = t2.nbmax;
Combiner SUM() et MAX() avec PostgreSQL
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.