Rappel SQL

soit le schéma de la base de données relationnelle suivante:
produits(id ,libelle,prix,quantiteStock,marque)
clients(id,nom,prenom,tel,ville)
ventes(idvente,#idClient,#idProduit,dateVente,prixVente,QuantiteVendue)

Questions & répones

  • Q Quels sont les produits vendus le plus cher par unité en ordre décroissant de prix?
    SELECT produits.libelle, MAX(ventes.prixVente / ventes.QuantiteVendue) AS prix_par_unite_max
    FROM produits
    INNER JOIN ventes ON produits.id = ventes.#idProduit
    GROUP BY produits.id
    ORDER BY prix_par_unite_max DESC;
  • Q Quels sont les clients qui ont effectué des achats pour un montant supérieur à 500€, triés par montant total en ordre décroissant?
    SELECT clients.nom, clients.prenom, SUM(ventes.prixVente) AS montant_total_achats
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    GROUP BY clients.nom, clients.prenom
    HAVING montant_total_achats > 500
    ORDER BY montant_total_achats DESC;
  • Q Quels sont les produits vendus en 2023 triés par quantité vendue en ordre décroissant?
    SELECT produits.libelle, SUM(ventes.QuantiteVendue) AS quantite_totale
    FROM produits
    INNER JOIN ventes ON produits.id = ventes.#idProduit
    WHERE YEAR(ventes.dateVente) = 2023
    GROUP BY produits.libelle
    ORDER BY quantite_totale DESC;
  • Q Quels sont les clients qui ont effectué des achats pour un montant supérieur à 1000€, triés par nom et prénom en ordre alphabétique?
    SELECT clients.nom, clients.prenom, SUM(ventes.prixVente) AS montant_total_achats
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    GROUP BY clients.nom, clients.prenom
    HAVING montant_total_achats > 1000
    ORDER BY clients.nom, clients.prenom;
  • Q Quels sont les ventes avec la quantité vendue la plus élevée, triés par quantité vendue en ordre décroissant?
    SELECT ventes.idvente, ventes.QuantiteVendue
    FROM ventes
    ORDER BY ventes.QuantiteVendue DESC;
  • Q Quels sont les produits vendus le moins cher par quantité, triés par prix de vente par unité en ordre croissant?
    SELECT produits.libelle, MIN(ventes.prixVente / ventes.QuantiteVendue) AS prix_par_unite_min
    FROM produits
    INNER JOIN ventes ON produits.id = ventes.#idProduit
    GROUP BY produits.id
    ORDER BY prix_par_unite_min;
  • Q Quels sont les clients qui ont effectué des achats pour un montant total supérieur à la somme des prix de vente de tous les produits en stock, triés par montant total en ordre décroissant?
    SELECT clients.nom, clients.prenom, SUM(ventes.prixVente) AS montant_total_achats
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    WHERE ventes.#idProduit IN (SELECT id FROM produits WHERE quantiteStock > 0)
    GROUP BY clients.nom, clients.prenom
    HAVING SUM(ventes.prixVente) > (SELECT SUM(prix) FROM produits WHERE quantiteStock > 0)
    ORDER BY montant_total_achats DESC;
  • Q Quels sont les produits vendus le plus souvent, triés par nombre de ventes en ordre décroissant?
    SELECT produits.libelle, COUNT(ventes.#idProduit) AS nombre_ventes
    FROM produits
    INNER JOIN ventes ON produits.id = ventes.#idProduit
    GROUP BY produits.libelle
    ORDER BY nombre_ventes DESC;
  • Q Quels sont les clients qui ont acheté des produits de plus de deux marques différentes, triés par nombre de marques en ordre décroissant?
    SELECT clients.nom, clients.prenom, COUNT(DISTINCT produits.marque) AS nombre_marques_achetees
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    INNER JOIN produits ON ventes.#idProduit = produits.id
    GROUP BY clients.id
    HAVING COUNT(DISTINCT produits.marque) > 2
    ORDER BY nombre_marques_achetees DESC;
  • Q Quels sont les produits dont le prix de vente est supérieur à la moyenne des prix de vente de leur produit, triés par prix de vente en ordre décroissant?
    SELECT produits.libelle, ventes.prixVente
    FROM produits
    INNER JOIN ventes ON produits.id = ventes.#idProduit
    WHERE ventes.prixVente > (SELECT AVG(prixVente) FROM ventes)
    ORDER BY ventes.prixVente DESC;
  • Q Quels sont les ventes avec une quantité vendue supérieure à la moyenne des quantités vendues de leur produit, triés par quantité vendue en ordre décroissant?
    SELECT ventes.idvente, #idProduit, QuantiteVendue
    FROM ventes
    HAVING QuantiteVendue > (SELECT AVG(QuantiteVendue) FROM ventes)
    ORDER BY QuantiteVendue DESC;
  • Q Quels sont les clients qui ont effectué des achats pour un montant supérieur à la moyenne des montants totaux d'achat de tous les clients, triés par montant total en ordre décroissant?
    SELECT clients.nom, clients.prenom, SUM(ventes.prixVente) AS montant_total_achats
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    GROUP BY clients.nom, clients.prenom
    HAVING SUM(ventes.prixVente) > (SELECT AVG(total_achats) FROM (SELECT SUM(ventes.prixVente) AS total_achats FROM clients INNER JOIN ventes ON
    
  • Q Quels sont les clients ayant effectué le plus grand nombre d'achats, regroupés par le nombre d'achats (en ordre décroissant)?
    SELECT clients.nom, clients.prenom, COUNT(ventes.idvente) AS nombre_achats
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    GROUP BY clients.nom, clients.prenom
    ORDER BY nombre_achats DESC;
  • Q Quels sont les marques de produits avec le nombre total le plus élevé de produits vendus, regroupées par le nombre de ventes (en ordre décroissant)?
    SELECT produits.marque, COUNT(ventes.#idProduit) AS nombre_ventes
    FROM produits
    INNER JOIN ventes ON produits.id = ventes.#idProduit
    GROUP BY produits.marque
    ORDER BY nombre_ventes DESC;
  • Q Quels sont les mois de l'année où le nombre de ventes est le plus élevé, regroupés par mois (en ordre décroissant)?
    SELECT YEAR(dateVente) AS annee, MONTH(dateVente) AS mois, COUNT(*) AS nombre_ventes
    FROM ventes
    GROUP BY annee, mois
    ORDER BY nombre_ventes DESC;
  • Q Quels sont les produits vendus au prix moyen le plus élevé, regroupés par produit (en ordre décroissant)?
    SELECT produits.libelle, AVG(ventes.prixVente) AS prix_moyen
    FROM produits
    INNER JOIN ventes ON produits.id = ventes.#idProduit
    GROUP BY produits.libelle
    ORDER BY prix_moyen DESC;
  • Q Quels sont les clients qui ont effectué des achats pour un montant total supérieur à la moyenne des montants totaux d'achat de tous les clients, regroupés par montant total (en ordre décroissant)?
    SELECT clients.nom, clients.prenom, SUM(ventes.prixVente) AS montant_total_achats
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    GROUP BY clients.nom, clients.prenom
    HAVING SUM(ventes.prixVente) > (SELECT AVG(total_achats) FROM (SELECT SUM(ventes.prixVente) AS total_achats FROM clients INNER JOIN ventes ON clients.id = ventes.#idClient GROUP BY clients.id) AS subquery)
    ORDER BY montant_total_achats DESC;
  • Q Quels sont les produits qui ont été vendus au moins 5 fois, regroupés par produit (en ordre décroissant)?
    SELECT produits.libelle, COUNT(ventes.#idProduit) AS nombre_ventes
    FROM produits
    INNER JOIN ventes ON produits.id = ventes.#idProduit
    GROUP BY produits.libelle
    HAVING COUNT(ventes.#idProduit) >= 5
    ORDER BY nombre_ventes DESC;
  • Q Quels sont les clients qui ont acheté des produits de la marque "Samsung", regroupés par client (en ordre alphabétique)?
    SELECT clients.nom, clients.prenom
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    INNER JOIN produits ON ventes.#idProduit = produits.id
    WHERE produits.marque = 'Samsung'
    GROUP BY clients.nom, clients.prenom
    ORDER BY clients.nom, clients.prenom;
  • Q Quels sont les produits qui ont été vendus à un prix supérieur à la moyenne des prix de vente de tous les produits, regroupés par produit (en ordre décroissant)?
    SELECT produits.libelle, AVG(ventes.prixVente) AS prix_moyen
    FROM produits
    INNER JOIN ventes ON produits.id = ventes.#idProduit
    GROUP BY produits.libelle
    HAVING AVG(ventes.prixVente) > (SELECT AVG(prixVente) FROM ventes)
    ORDER BY prix_moyen DESC;
  • Q Quels sont les ventes avec la quantité vendue la plus élevée, regroupées par quantité vendue (en ordre décroissant)?
    SELECT ventes.idvente, ventes.QuantiteVendue
    FROM ventes
    GROUP BY ventes.idvente, ventes.QuantiteVendue
    ORDER BY ventes.QuantiteVendue DESC;
  • Q Quels sont les clients qui ont acheté des produits de plus de deux marques différentes, regroupés par client (en ordre alphabétique)?
    SELECT clients.nom, clients.prenom
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    INNER JOIN produits ON ventes.#idProduit = produits.id
    GROUP BY clients.nom, clients.prenom
    HAVING COUNT(DISTINCT produits.marque) > 2
    ORDER BY clients.nom, clients.prenom;
  • Q Quels sont les ventes avec un prix de vente supérieur à 150% du prix d'achat, regroupées par vente (en ordre décroissant)?
    SELECT ventes.idvente, #idProduit, ventes.prixVente, produits.prix
    FROM ventes
    INNER JOIN produits ON ventes.#idProduit = produits.id
    WHERE ventes.prixVente > 1.5 * produits.prix
    ORDER BY ventes.prixVente DESC;
  • Q Quels sont les clients qui ont acheté des produits de la marque "Apple" en 2023, regroupés par client (en ordre alphabétique)?
    SELECT clients.nom, clients.prenom
    FROM clients
    INNER JOIN ventes ON clients.id = ventes.#idClient
    INNER JOIN produits ON ventes.#idProduit = produits.id
    WHERE produits.marque = 'Apple' AND YEAR(ventes.dateVente) = 2023
    ORDER BY clients.nom, clients.prenom;