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!
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 :