SQL : Challenge #03

J’ai commencé cette série il y a quelques semaines en me basant sur les challenges de l’excellent Jacob Sebastian (challenge #1, challenge #2 & challenge #3).

J’ai trouvé que c’était réellement un bon exercice de style et qui plus est fun (pas forcément pour tout le monde je vous l’accorde). Je pense que c’est un bon moyen de réfléchir sur des problèmes courants, de voir les différentes solutions possibles mais aussi de mettre en avant certaines techniques et d’apprendre ou de revoir certains points particuliers du sql qui sont peut-être moins connus.

En bref, c’est un bon moyen de se perfectionner en sql par la pratique en échangeant des solutions, des points de vues et en s’amusant.

C’est pourquoi je vais ajouter mes propres challenges dont voici le premier.

 

Le Contexte

Nous avons une table de produits avec leurs prix:

ID          NAME                             PRICE
----------- -------------------------------- ---------------------
1           PRODUCT 1                        100,00
2           PRODUCT 2                        220,00
3           PRODUCT 3                        70,00

Et une table contenant des bons de réduction:

ID          NAME                             VALUE       IS_PERCENT
----------- -------------------------------- ----------- ----------
1           COUPON 1 : -15$                  15          0
2           COUPON 2 : -5$                   5           0
3           COUPON 3 : -10%                  10          1
4           COUPON 4 : -12$                  12          0

 

Un ou deux bons peuvent être utilisés pour chaque produit mais le prix final réduit ne doit pas être inférieur à 60% du prix initial.

Le Challenge

Le but est ici de trouver pour chaque produit le prix minimum pouvant être payé en utilisant n’importe quelle combinaison de bons de réduction et en tenant compte des restrictions ci-dessus. Il faudra aussi produire une description des bons de réduction appliqués.

Voici la table finale résultante de vos calculs que vous devrez produire:

ID          NAME                 PRICE                 DISCOUNT_PRICE        COUPON_NAMES
----------- -------------------- --------------------- --------------------- ----------------------------------------
1           PRODUCT 1            100,00                73,00                  COUPON 1 : -15$ + COUPON 4 : -12$
2           PRODUCT 2            220,00                183,00                 COUPON 3 : -10% + COUPON 1 : -15$
3           PRODUCT 3            70,00                 43,00                  COUPON 1 : -15$ + COUPON 4 : -12$

 

Notes

  • Le challenge doit être fait en une seule requête sql (sans tables temporaires, variable,etc…)
  • Il n’y a pas de restrictions de version de sql serveur, toutes les techniques à votre disposition peuvent être utilisées (dans la mesure où les contraintes du challenge sont respectées et que cela est fait en une requête)
  • Vos réponses doivent impérativement utiliser le jeux de données fournis (sans quoi il sera difficile pour moi de tester)
  • Les réponses sont à m’envoyer par mail sur [challenge at rui point fr]
  • Date limite d’envoi: le 3 avril 2009.

 

Données à utiliser:

DECLARE @T TABLE (ID INT IDENTITY, NAME NVARCHAR(20),PRICE MONEY)
INSERT INTO @T (NAME,PRICE) VALUES ('PRODUCT 1',100)
INSERT INTO @T (NAME,PRICE) VALUES ('PRODUCT 2',220)
INSERT INTO @T (NAME,PRICE) VALUES ('PRODUCT 3',70)

DECLARE @C TABLE (ID INT IDENTITY, NAME NVARCHAR(20), VALUE INT, IS_PERCENT BIT)
INSERT INTO @C (NAME,VALUE,IS_PERCENT) VALUES ('COUPON 1 : -15$',15,0)
INSERT INTO @C (NAME,VALUE,IS_PERCENT) VALUES ('COUPON 2 : -5$',5,0)
INSERT INTO @C (NAME,VALUE,IS_PERCENT) VALUES ('COUPON 3 : -10%',10,1)
INSERT INTO @C (NAME,VALUE,IS_PERCENT) VALUES ('COUPON 4 : -12$',12,0)

Je publierai les résultat quelques jours après cette date.

Have fun!

Publié samedi 28 mars 2009 02:11 par Rui
Classé sous , , , ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires


Les 10 derniers blogs postés

- Conf’SharePoint : 10 bonnes raisons pour ne pas la rater par Le petit blog de Pierre / Pierre's little blog le 05-14-2013, 02:24

- [Event] Soirée de lancement Agile .NET France à Lyon par Blog Agile/ALM de Vincent THAVONEKHAM le 05-13-2013, 01:29

- .NET / Debug : inspection de la mémoire d'applications .NET (dump ou processus live) : première livraison d'une librairie .NET par Microsoft par CoqBlog le 05-11-2013, 22:21

- SharePoint : Incompatibilité avec Internet Explorer 10 (IE10) par Blog Technique de Romelard Fabrice le 05-08-2013, 16:29

- AutoSPInstaller pour SharePoint 2013 maintenant disponible en “RTM” par Julien Chable le 05-06-2013, 23:30

- [TFS2010] A la recherche du Shelveset perdu par Blog de Jérémy Jeanson le 05-03-2013, 21:46

- .NET / Debug post-mortem : obtenir le fichier mscordacwks.dll correspondant à un dump quand on n'a plus d'accès direct à ce fichier par CoqBlog le 04-28-2013, 19:57

- [W8] Afficher un graphe par CPU dans le gestionnaire des tâches par Blog de Jérémy Jeanson le 04-28-2013, 17:48

- [WCF] Limiter proprement l’accès à vos ressources serveur par Blog de Jérémy Jeanson le 04-26-2013, 22:59

- Event : Je serai speaker à la Conf’SharePoint par Blog Technique de Romelard Fabrice le 04-26-2013, 12:00