假设我有一张包含
|vendor | price| productID|
|--------------------------------|
|abc | 6 | 0001 |
|1 | 7 | 0001 |
|def | 8 | 0001 |
|xyz | 30 | 0002 |
|zxy | 32 | 0002 |
现在我想获得产品的 min() 价格的供应商
对于产品 0001,它将是供应商 ABC
对于产品 0002,它将是供应商 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;
关于sql - 检查某个行是否存在,否则选择不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39268978/