Requettes sql

yomismo -  
Reivax962 Messages postés 3742 Statut Membre -
Bonjour,
Difficle de reprendre le SQL 10 ans apres avoir abandonné me voila face a un problème syntaxique que je n'arrive pas a résoudre!
si vous pouvez aider?
merci par avance

ci joint photo des tables

http://yomismo.free.fr/tables.jpg

c) Write a SQL statement that returns the Sum of Sales Amount grouped by Product Category.

d) Write a SQL statement that returns the Sum of Sales Amount grouped by Product Category having sales greater than 1500

e) Write a SQL Statement that returns the Distinct count of customers from the Sales table

f) Write a SQL Statement that returns a list of products that do not appear the Sales table.

merci

Michel Aquadié.

3 réponses

Reivax962 Messages postés 3742 Statut Membre 1 011
 
Bonjour,

Je donne la réponse pour la c), mais pour les autres je te laisserai chercher un peu :)

c)
SELECT p.ProductCategory, SUM(s.SalesAmount)
FROM Products p
INNER JOIN Sales s ON p.ProductID = s.ProductID
GROUP BY p.ProductCategory

d)
Là, ça dépend de l'interprétation de l'énoncé. Si le « having sales greater than 1500 » signifie que le montant total des ventes pour la catégorie doit être supérieur à 1500, il faut utiliser une clause HAVING. Si il signifie qu'il ne faut prendre en compte que les ventes dont le montant unitaire est supérieur à 1500, alors il faut utiliser une clause WHERE.

e)
Un simple COUNT DISTINCT fera l'affaire.

f)
Deux possibilités. Soit une jointure externe, puis une condition NULL sur un champ de la jointure, soit une requête imbriquée du style NOT IN.
La première est plus rapide à l'exécution, mais la deuxième plus facile à comprendre et à écrire.

Xavier
0
yomismo
 
merci xavier

apres reflecxion jai fait cela

e
SELECT COUNT(DISTINCT Customer) from Sales

f
jai utilsie le NOT IN mais je netais pas sur

en revanche je sèche sur la D... merci quand meme

bonne journee
0
Reivax962 Messages postés 3742 Statut Membre 1 011
 
Pour la d) c'est comme pour la c), mais en précisant soit
HAVING SUM(s.SalesAmount) > 1500
soit
WHERE s.SalesAmount > 1500.

Honnêtement, l'énoncé est ambigu et ne permet pas de décider entre les deux, qui n'ont pas le même sens. On peut se dire qu'il faut utiliser Having car ce mot est repris dans l'énoncé...

Having va donner comme résultat
Mountain Bike 2000
Road Bike 3500

Where va donner comme résultat
Mountain Bike 2000
0