Partage
  • Partager sur Facebook
  • Partager sur Twitter

Combiner SUM() et MAX() avec PostgreSQL

    14 juin 2020 à 11:45:43

    Bonjour à tous,

    J'utilise la base de données northwind disponible ici : https://github.com/pthom/northwind_psql
    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)

    Merci d'avance pour votre aide ! :)


    -
    Edité par adri7101 14 juin 2020 à 11:48:09

    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2020 à 12:33:24

      Salut,

      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;



      • Partager sur Facebook
      • Partager sur Twitter

      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.
      • Editeur
      • Markdown