只是查询。列出订购“鞋子”的接收者的生日.2。列出提供最低和最高价格订单的承运人的名称。

时间:2016-11-29 19:07:52

标签: sql

[CARRIER表]

Carrier_ID        Name        Gender      Birthday  


2001              Aylin       Female      29.03.1975 
2002              Arif        Male        29.09.1996 
2003              Berker      Male        13.11.1970 
2004              Sezgin      Male        13.06.1988 
2005              Yeliz       Female      11.08.1951 
2006              Dolunay     Male        17.07.1974 
2007              Reşide      Female      10.01.1960 
2008              Münir       Male        27.06.1989 

[订购表]

Order_ID描述价格Carrier_ID

1001             24” Monitor           199          2001 
1002             Cloths                45           2003 
1003             Vaporizer             24           2006 
1004             Book                  19           2002 
1005             Graphics Card         450          2003 
1006             Shoes                 37           2007 
1007             Bag                   14           2008 
1008             Processor             299          2008 

1 个答案:

答案 0 :(得分:0)

尝试将这些内容与您在帖子中提供的一些信息以及您留下的评论中放在一起......看来您有两个表CarrierOrder。首先,我确实在Order表中看到,您有Description个“鞋子”的条目。我希望,你会有一个查找表,其中包含每个产品/订单类型的条目,但是到目前为止,我们提供给你的东西,不太理想的方法是:

关于你的第一个问题:

  

列出订购“鞋子”的接收者的生日

select c.Birthday
from Carrier c
join Order o
on o.Carrier_ID = c.Carrier_ID
where o.Description = 'Shoes';

理想情况下,您应该拥有一个包含唯一标识符和产品说明的产品/订单类型的查找表。然后,您应该将唯一标识符存储在订单表中而不是描述中。然后,您将加入产品查找表以获取有关该产品的信息。

使用新提供的信息,这里可能是一个更好的查询,它与第一个相同,但更恰当的是:

select c.Birthday
from Carrier c
join Order o
on o.Carrier_ID = c.Carrier_ID
where o.Order_ID = 1006;

关于你问题的第二部分:

  

列出提供最低价格和最高价格订单的承运商名称。

with MinPrice_CTE (MinPrice)
as
(
   select Min(Price) as MinPrice
   from Orders
),
MaxPrice_CTE (MaxPrice)
as
(
   select Max(Price) as MaxPrice
   from Orders
)
select c.Name, 
   case when o.Price = MinPrice then 'Minimum Price' 
   else 'Maximum Price' end as PriceGroup
from Carriers c
join Orders o
on o.Carrier_ID = c.Carrier_ID
where o.Price in (MinPrice, MaxPrice);