我的SQL技能低的问题。
在表格Products
中,其结构为Id
,Supplier
,Brand
,Article
,Price
我必须按{{1}对所有记录进行分组}和Brand
并选择在查询Article
中指定的组ID在组中的价格最低或其价格低于其他ID超过5%。
尝试使用Supplier
和GROUP BY
,但没有任何效果。有什么想法吗?
算法:
1.按HAVING
和Brand
分组所有记录
2.仅选择包含指定Article
之一的组
3.如果在选定的组中,指定的Supplier
没有最低Supplier
或他的Price
低于另一个的最低,则选择该组
答案 0 :(得分:1)
我正在将这个问题解释为找到供应商价格比最低价格高出5%以上的特定供应商的所有产品。语言有点难以理解,所以这是我最好的猜测。
如果是这样,使用窗口函数计算组的最低价格,然后使用简单的逻辑:
select p.*
from (select p.*,
min(price) over (partition by supplier, article) as MinPrice
from products p
) p
where SupplierID = @SupplierId and
price > 1.05 * MinPrice;
编辑:
要获得min()
排除某些供应商:
select p.*
from (select p.*,
min(case when supplier not in (<list>) then price end) over
(partition by supplier, article) as MinPrice
from products p
) p
where SupplierID = @SupplierId and
price > 1.05 * MinPrice;
答案 1 :(得分:0)
不完全确定你所追求的是什么,但如果我正确地读了你的问题,那么
Select * From Products p
Where price != (Select Min(Price)
From products
Where Brand = p.Brand
And Article = p.Article)
And price < 0.95 *
(Select Min(Price)
From products
Where id != p.Id
And Brand = p.Brand
And Article = p.Article)
如果这不是您想要的,它仍然应该为您提供如何为您想要的东西编写正确的SQL的线索......