Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Modifier requête catégorie de produit


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Modifier requête catégorie de produit
    Je dois modifier la requête ci contre pour lister le nombre de produits(product)
    disponibles par catégorie de produits(product_category).
    Les conditions sont:

    on ne listera pas les catégories de produits ne contenant pas de produit

    N'afficher que les colonnes CATEGORY_NAME(product_category.name) et PRODUCT_COUNT
    dans cet ordre.

    Le code est le suivant:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    select * 
    from product


    Moi j'ai proposé la solution:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    select product_category.name AS CATEGORY_NAME,count(product) AS PRODUCT_COUNT
    from product
    group by product_category;


    La condition"on ne listera pas les catégories de produits ne contenant pas de produit",je ne sais pas
    comment la traduire en SQL.
    Avez vous une idée svp?

  2. #2
    Membre éclairé
    Dans ton autre sujet je t'ai dit qu'il fallait utiliser la clause HAVING pour filtrer des agrégats:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select product_category.name AS CATEGORY_NAME,count(product) AS PRODUCT_COUNT
    from product
    group by product_category
    having count(product) > 0;

  3. #3
    Nouveau Candidat au Club
    re
    D'accord merci

  4. #4
    Modérateur

    À moins que la table soit en JSON ou quelque chose du genre, je ne vois pas ces requêtes fonctionner : pas à cause du having, à cause du product_category.name.

  5. #5
    Nouveau Candidat au Club
    Re
    et pourquoi la table ne fonctionnerait pas?
    voici la table en schéma en pièces jointes

    dans le champ PRODUCT_Category,vous trouverez l'attribut name.

  6. #6
    Modérateur

    Parce que votre FROM ne couvre que la table product, pas product_category.
    Celle-ci devrait fonctionner :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      select pca.name as category_name
           , count(*) as product_count
        from product          prd
        join product_category pca on pca.product_category_id = prd.product_category_id
    group by pca.name;

  7. #7
    Nouveau Candidat au Club
    Re
    Ah oui j'avais pas pensé à ça, merci

  8. #8
    Nouveau Candidat au Club
    Re
    Mais je ne comprend pas pourquoi pour le FROM , vous faites une
    jointure entre la table PRODUCT et la table PRODUCT_CATEGORY,
    la jointure vous la faite sur l'attribut product_category_id,
    Pourquoi svp?

  9. #9
    Modérateur

    Peut-être cet extrait de ce que vous avez envoyé dans le document Word pourrait vous aider :

  10. #10
    Nouveau Candidat au Club
    Re
    Oui je comprends,il y'a une jointure entre les 2,on fait la jointure parce qu'il y'a une flêche
    qui lie les 2 tables?c'est la flêche qui est l'indice,mais est ce que le sens de la flêche compte?
    la flêche indique que la clé étrangère(product_category_id) de la table product est la clé primaire
    de la table product_category.
    Mais est ce que le sens de la flêche compte?si c'était dans le sens opposé qu'est ce qui se serait passer?
    le code final est (j'ai ajouté le having):
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select pca.name as category_name
           , count(*) as product_count
        from product     as     prd
        join product_category pca on pca.product_category_id = prd.product_category_id
    group by pca.name
    having count(*) >0;

###raw>template_hook.ano_emploi###