IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Langage SQL Discussion :

Besoin d'aide en SQL


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    data analyst
    Inscrit en
    Septembre 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : data analyst
    Secteur : Alimentation

    Informations forums :
    Inscription : Septembre 2023
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Besoin d'aide en SQL
    Bonjour

    je suis nouvelle en SQL et je dois résoudre un cas mais je suis totalement perdue.

    est-ce que quelqu'un pourrait m'aider svp ?

    1. Comptez le nombre de commandes (orders) distinctes dans la table QUALITY, qui ont été réalisée par le marchand 860

    2. Créez un super-dataset. Pour cela, sélectionnez toutes les lignes de la table QUALITY, ajoutez les informations "BRAND" et "LABEL_PRODUCT" depuis la table PRODUCTS. Sélectionnez les valeurs de ce dataset où les marques (brand) ne sont pas null. Ordonnez la date par ordre ascendant et donnez le premier nom qui apparaît.

    3. Quel est le nombre de commandes par date ? Triez le résultat pour voir la plus vieille date en premier. Quel est le nombre de commande que vous avez ?


    💡 *Indice: n’oubliez pas de cast les timestamps en dates ! NE MODIFIEZ PAS DIRECTEMENT LES TABLES*



    4. Difficile - Comptez les marques qui ont été vendues plus d'une fois par le marchand n° 332.

    5. Difficile - Comptez le nombre de commandes associées aux marchands "ONLINE" ou "OFFLINE". Les résultats doivent être sur la même ligne (le champ "ONLINE indique si le marchand est encore actif sur Back Market).


    💡 *Exemple de résultat attendu (les nombres sont faux) :*

    *NB_ONLINE NB_OFFLINE
    4000 1000*

    Je vous mets en pièces jointes les fichiers à utiliserQuality.xlsxProducts.xlsxMerchants.xlsx



    Merci

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 219
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 219
    Points : 8 450
    Points
    8 450
    Billets dans le blog
    17
    Par défaut
    C'est un devoir ? Donne-nous au moins tes tentatives et le schéma de tes tables.

    Ouvrir un fichier Excel, non merci

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    data analyst
    Inscrit en
    Septembre 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : data analyst
    Secteur : Alimentation

    Informations forums :
    Inscription : Septembre 2023
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour Seb

    voilà mes tables : J'ai fait un screen shot

    mon code question 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT order_id
    FROM Quality
    WHERE merchant_id ="860";
    mon code question 2


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.*, t2.BRAND, t2.LABEL_PRODUCT
    FROM Quality AS t1
    JOIN Products AS t2 ON 1=1
    WHERE brand IS not NULL
    ORDER BY order_date ASC;
    mon code question 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT order_date, SUM(order_id) AS nombre_commandes
    FROM Quality
    GROUP BY order_date;

    voilà ce que j'ai fait jusqu'à maintenant mais je cale complètement


    Nom : SQL table 3.png
Affichages : 86
Taille : 9,4 KoNom : SQL table 2.png
Affichages : 82
Taille : 4,5 KoNom : SQL table 1.png
Affichages : 76
Taille : 4,7 Ko

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 219
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 219
    Points : 8 450
    Points
    8 450
    Billets dans le blog
    17
    Par défaut
    1. Comptez le nombre de commandes (orders) distinctes dans la table QUALITY, qui ont été réalisée par le marchand 860
    Tu fais :

    SELECT DISTINCT order_id
    FROM Quality
    WHERE merchant_id ="860";
    Or
    Ton énoncé donne "QUALITY" et tu écris "Quality"
    Tu ne comptes pas => Il faut utiliser COUNT()
    Tu délimites l'ID avec " => S'il s'agit d'une chaîne il faut le délimiter avec ', s'il s'agit d'un numérique il ne faut pas le délimiter.

    SELECT COUNT(DISTINCT ORDER_ID)
    FROM QUALITY
    WHERE MERCHANT_ID = 860;
    2. Créez un super-dataset. Pour cela, sélectionnez toutes les lignes de la table QUALITY, ajoutez les informations "BRAND" et "LABEL_PRODUCT" depuis la table PRODUCTS. Sélectionnez les valeurs de ce dataset où les marques (brand) ne sont pas null. Ordonnez la date par ordre ascendant et donnez le premier nom qui apparaît.
    Tu fais :

    SELECT t1.*, t2.BRAND, t2.LABEL_PRODUCT
    FROM Quality AS t1
    JOIN Products AS t2 ON 1=1
    WHERE brand IS not NULL
    ORDER BY order_date ASC;
    Or
    Ton énoncé donne "QUALITY" et "PRODUCTS" et tu écris "Quality" et "Products", idem pour "brand" que tu écris une fois "BRAND" et une autre fois "brand" => Il faut rester cohérent
    Ton critère de jointure 1=1 est toujours TRUE => Tu effectues un produit cartésien (CROSS JOIN) et non une jointure interne
    L'énoncé ne précise pas selon quelle colonne il faut trier, on estime QUALITY.ORDER_DATE
    Généralement on évite les * dans le SELECT, ici il pourrait y avoir collision de noms de colonnes
    Essaie de trouver d'autres alias que t1 et t2 => Illisible et si l'ordre de tes jointures change il faudra tout renommer
    Je ne sais pas quel SGBD tu utilises, avec MySQL on limite le nombre de lignes avec la clause LIMIT

    SELECT q.COUNTRY_CODE, q.MERCHANT_ID, ..., p.BRAND, p.LABEL_PRODUCT
    FROM QUALITY AS q
    JOIN PRODUCTS AS p ON q.PRODUCT_ID = p.ID -- Jointure selon l'ID du produit
    WHERE p.BRAND IS NOT NULL
    ORDER BY q.ORDER_DATE ASC
    LIMIT 1; -- A adapter selon ton SGBD
    3. Quel est le nombre de commandes par date ? Triez le résultat pour voir la plus vieille date en premier. Quel est le nombre de commande que vous avez ?
    Tu fais :

    SELECT order_date, SUM(order_id) AS nombre_commandes
    FROM Quality
    GROUP BY order_date;
    Or
    Tu ne respectes pas la casse (majuscules/minuscules)
    On ne te demande pas d'additionner des ID commande, mais de les dénombrer => Il faut utiliser non pas SUM() mais COUNT()
    Tu ne tries pas le résultat comme demandé

    Je ne sais pas trop ce qu'est une commande dans ton SI, partons du principe qu'on peut les décompter selon les ORDER_ID uniques :

    SELECT ORDER_DATE, COUNT(DISTINCT ORDER_ID)
    FROM QUALITY
    GROUP BY ORDER_DATE
    ORDER BY ORDER_DATE DESC;
    En attente des tentatives pour les autres questions.

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    data analyst
    Inscrit en
    Septembre 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : data analyst
    Secteur : Alimentation

    Informations forums :
    Inscription : Septembre 2023
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour Seb,

    super merci,
    voilà mes codes pour les questions 4 et 5

    pour la question 4 : Comptez les marques qui ont été vendues plus d'une fois par le marchand n° 332.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT COUNT(p.BRAND),p.ID,m.ID,
    FROM PRODUCTS As p
    	INNER JOIN MERCHANTS as m
        	on p.ID = m.ID
    WHERE m.ID = 332
    GROUP BY BRAND
    HAVING COUNT(p.BRAND)
    pour la question 5 : Comptez le nombre de commandes associées aux marchands "ONLINE" ou "OFFLINE". Les résultats doivent être sur la même ligne (le champ "ONLINE indique si le marchand est encore actif sur Back Market). (Mais je pense qu'il doit manquer quelque chose)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(order_id) as nb_OFFLINE,COUNT(orderline_id) AS nb_ONLINE
    FROM Quality;
    Pour la question 3 Quel est le nombre de commandes par date ? Triez le résultat pour voir la plus vieille date en premier. Quel est le nombre de commande que vous avez ?
    je dois arriver le chiffre 1782, je ne trouve pas ou et qu'est-ce que je dois ajouter à mon code pour arriver à ce total (nombre de commande total pour le 1ère date 2018-07-01)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ORDER_DATE, COUNT(DISTINCT ORDER_ID)
    FROM QUALITY
    GROUP BY ORDER_DATE
    ORDER BY ORDER_DATE DESC;

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 677
    Points
    39 677
    Billets dans le blog
    9
    Par défaut
    Bonjour Koryne

    Citation Envoyé par Koryne Voir le message
    Comptez les marques qui ont été vendues plus d'une fois par le marchand n° 332.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT COUNT(p.BRAND),p.ID,m.ID,
    FROM PRODUCTS As p
    INNER JOIN MERCHANTS as m
       ON p.ID = m.ID
    WHERE m.ID = 332
    GROUP BY BRAND
    HAVING COUNT(p.BRAND)
    Cette requête est invalide syntaxiquement :
    • il faut effectuer un regroupement (GROUP BY) sur les colonnes ne faisant pas l'objet d'un agrégat
    • il manque la valeur de la restriction (HAVING) du regroupement


    Comme on ne sait pas quelle est la colonne qui identifie la marque ni dans quelle table elle se trouve, il m'est difficile de vous proposer une requête répondant au besoin

Discussions similaires

  1. Besoin d'aide requete sql
    Par whippette dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/04/2009, 16h52
  2. Besoin d'aide PL SQL ?
    Par AlexDebutante dans le forum SQL
    Réponses: 0
    Dernier message: 07/02/2008, 14h03
  3. besoin d'aide pl/SQL
    Par toome dans le forum PL/SQL
    Réponses: 1
    Dernier message: 13/12/2005, 15h26
  4. Besoin d'aide requete sql
    Par dinde dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/10/2005, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo