假设我有一个包含的表
|vendor | price| productID|
|--------------------------------|
|abc | 6 | 0001 |
|1 | 7 | 0001 |
|def | 8 | 0001 |
|xyz | 30 | 0002 |
|zxy | 32 | 0002 |
Run Code Online (Sandbox Code Playgroud)
现在我想得到一个产品的min()价格的供应商,
产品0001 的产品是供应商abc
,供应商xyz
但!如果有一个名为1的供应商,我希望看到他的名字而不是实际供应商的min()价格,如果产品没有名为1的供应商,我希望看到具有min()价格的供应商再次
如果这对你有意义..它有点像if-else结构,但我不知道如何在SQL中做到这一点
(抱歉格式化的表格很糟糕,我只是不按正确方式格式化)
谢谢
这是优先级查询.一种方法是使用row_number()并将优先级的规则放入order by.由此产生的查询:
select t.*
from (select t.*,
row_number() over (partition by productId
order by (case when vendorid = 1 then 1 else 2 end),
price asc
) as seqnum
from t
) t
where seqnum = 1;
Run Code Online (Sandbox Code Playgroud)