-1
votes

Comment trouver le produit le moins cher

J'apprends SQL et je suis coincé dans un problème. J'ai trois tables

table Product(
  model varchar(50),
  maker varchar(50),
  type varchar(50),
  CONSTRAINT product_pk PRIMARY KEY (model)
); 

table PC (
  serial_number varchar(50),
  model varchar(50),
  price number,
  speed number,
  ram number,
  hd varchar(50),
  cd varchar(50),
  CONSTRAINT pc_pk PRIMARY KEY (serial_number),CONSTRAINT pc_2_product_fkFOREIGN KEY (model) REFERENCES Product(model)
); 

Laptop (
  serial_number varchar(50),
  model varchar(50),
  price number,
  speed number,
  ram integer,
  hdvarchar(50),
  screen varchar(50),
  CONSTRAINT laptop_pk PRIMARY KEY (serial_number),CONSTRAINT laptop_2_product_fk FOREIGN KEY (model) REFERENCES Product(model)
);

Et j'ai besoin de trouver le PC ou l'ordinateur portable le moins cher compte tenu de la vitesse, de la RAM, de la HD. Si vous avez un conseil, je l'apprécierai. Merci


1 commentaires

Veuillez expliquer les règles que vous devez appliquer pour considérer qu'un PC ou un ordinateur portable est moins cher qu'un autre, et montrez ce que vous avez déjà fait


3 Réponses :


0
votes

Utilisez une clause WHERE pour limiter les résultats à ceux qui sont éligibles. Puis COMMANDEZ PAR pour avoir le moins cher en premier. Je ne sais pas quelles sont vos valeurs hd. Je suppose qu'ils ont une taille quelconque et peuvent être comparés à une valeur unique.

SELECT TOP 1 *
FROM PC
WHERE speed >= @speed_min AND ram >= @ram_min AND hd >= @hd_min
ORDER BY price ASC

Si vous avez besoin de l'ordinateur portable le moins cher, faites de même pour l'ordinateur portable. Si vous avez besoin des deux, utilisez un UNION ALL entre les deux requêtes.


0 commentaires

0
votes

L'option directe est de classer chaque catégorie et de la filtrer. 1.Mettez d'abord toutes les tables PC et Laptop. 2. Affectez rank / dense_rank aux données dans l'ordre de Price ASc et RAM desc. 3. Si vous triez le classement, vous obtiendrez la machine la moins chère avec la configuration la plus élevée dans l'ordre.

Remarque: nous décidons généralement du processeur ram n avant d'acheter un ordinateur portable / PC, donc dans un scénario réel, décidez de ce que vous voulez, appliquez-le dans le filtre et classez le reste des informations. Vous pouvez également filtrer la fourchette de prix et trier le reste des informations.


0 commentaires

0
votes

Merci à tous de prendre votre temps pour répondre, et je partage la façon dont j'y ai répondu.

WITH rank AS(
   SELECT row_number() OVER ( 
    PARTITION BY ram,speed,hd   
    ORDER BY price) position, maker,serial_number,speed,ram,hd,price,type 
    FROM (SELECT serial_number,speed,ram,hd,price,p.type,p.maker FROM product p JOIN laptop l ON p.model = l.model  
    UNION ALL SELECT serial_number,speed,ram,hd,price,p.type,p.maker FROM product p JOIN pc ON p.model = pc.model) 
    ORDER BY price 
)
SELECT maker,serial_number,speed,ram,hd,price,type FROM rank WHERE price = (SELECT MIN(price) FROM rank);


0 commentaires