【问题标题】:Select the producs of a provider with the lower product选择产品较低的供应商的产品
【发布时间】:2021-07-30 17:54:55
【问题描述】:

我有两个表,products 和 provider

提供者:

nif
user

产品:

cod_prod
name
price
provider
stock

预期结果:

例如我们在表中有产品这个;

cod_prod name Price Provid Stock
1 ball 2.00 peter 20
2 shoe 1.00 peter 20
3 flower 3.00 peter 20
4 bag 7.00 peter 20
5 balloon 3.00 peter 20
6 gun 2.00 martin 20
7 shotgun 4.00 martin 20
8 cheese 7.00 martin 20
9 shirt 7.00 martin 20
10 sunglass 6.00 martin 20

在这种情况下,价格较低的产品是鞋子,

2 鞋 1.00 彼得 40

如果在查询后得到较低产品价格的结果,我想要什么, 我得到了这个结果:

   name  provider 
   ball   peter     
   shoe   peter     
 flower   peter     
    bag   peter     
balloon   peter     

因为选择了较低的产品价格后进行查询,所以从产品价格较低的供应商处获取所有产品。

我现在有这个问题

select provider.user, products.name from provider
inner join products
on provider.nif = products.provider
where products.price = (select min(products.price) from products);

有了这个我可以选择最便宜的商品,但我不知道如何解决,问题是我想要一个查询,在最低便宜商品的条件下,我可以获得该供应商的产品列表。

P.D:我用产品表的预期结果和示例更新了问题,以更具体地说明我想要获得的内容。

【问题讨论】:

  • 样本数据和期望的结果将阐明您想要什么。
  • 我更新了预期的结果,以澄清我想用这个查询做什么:)

标签: sql oracle


【解决方案1】:

这是一种选择;它按价格对产品进行排名,然后使用该 CTE (rank_them) 获取您感兴趣的数据。

SQL> with
  2  -- sample data
  3  provider (nif, cuser) as
  4    (select 1, 'Provider 1' from dual union all
  5     select 2, 'Provider 2' from dual
  6    ),
  7  products (cod_prod, name, price, provider) as
  8    (select 1, 'Sugar', 10, 1 from dual union all
  9     select 2, 'Milk' , 20, 1 from dual union all
 10     select 3, 'Salt' ,  5, 2 from dual union all   --> cheapest
 11     select 4, 'Water', 15, 2 from dual
 12    ),
 13  -- query begins here
 14  rank_them as
 15    (select p.*,
 16          rank() over (order by price) rnk
 17     from products p
 18    )
 19  select d.nif, d.cuser, r.cod_prod, r.name, r.price
 20  from rank_them r join provider d on d.nif = r.provider
 21  where r.provider = (select r1.provider
 22                      from rank_them r1
 23                      where r1.rnk = 1
 24                     );

       NIF CUSER        COD_PROD NAME       PRICE
---------- ---------- ---------- ----- ----------
         2 Provider 2          3 Salt           5
         2 Provider 2          4 Water         15

SQL>

【讨论】:

  • 在代码中包含行号只是意思;)
  • 这是我的 SQL*Plus 会话的复制/粘贴,@Mat。我不是故意要刻薄(也许只是一点点):)
猜你喜欢
  • 2018-02-22
  • 2018-04-26
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 2022-09-28
  • 2022-07-08
相关资源
最近更新 更多