【问题标题】:How to find the cheaper product如何找到更便宜的产品
【发布时间】:2021-02-25 01:44:05
【问题描述】:

我正在学习 sql,但遇到了问题。 我有三张桌子

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)
);

考虑到速度、内存、高清,我需要找到最便宜的个人电脑或笔记本电脑。如果您有任何建议,我将不胜感激。谢谢

【问题讨论】:

  • 请解释你需要应用的规则来考虑一台电脑或笔记本电脑比另一台便宜,并展示你已经做过的事情

标签: mysql sql-server


【解决方案1】:

感谢大家花时间回答,我分享我回答的方式。

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);

【讨论】:

    【解决方案2】:

    使用 WHERE 子句将结果限制为符合条件的结果。然后 ORDER BY 先买最便宜的。我不确定你的高清值是什么。我会假设它们是某种大小,并且可以与单个值进行比较。

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

    如果您需要最便宜的笔记本电脑,请为笔记本电脑做同样的事情。如果两者都需要,请在两个查询之间使用 UNION ALL。

    【讨论】:

      【解决方案3】:

      直接选项是对每个类别进行排名并对其进行过滤。 1.首先联合所有PC和笔记本电脑表。 2. 将 rank/dense_rank 按 Price ASc 和 RAM desc 的顺序分配给数据。 3.如果你排序排名,你会得到配置最高的最便宜的机器。

      注意:我们通常在购买笔记本电脑/PC 之前决定 ram n 处理器,因此在实际场景中决定您想要在过滤器中应用什么并对其余信息进行排名。您还可以过滤价格范围并对其余信息进行排序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-22
        • 1970-01-01
        • 2018-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多