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 ![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
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.
Partager