sql - 检查某个行是否存在,否则选择不同的行

标签 sql oracle

假设我有一张包含

|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/

相关文章:

sql - 计算行数时 null 和 0 之间的区别

mysql - 监视数据库更改的免费工具?

oracle - ORA-00942 : table or view does not exist (ColdFusion application)

mysql - 从oracle表中获取最后5分钟的数据

sql - Informix 触发器删除一条记录

php - 使用php在多行中插入表单值

mysql - "Unknown column"连接查询中的错误旨在选择感兴趣的组中的单个行

java - JDBC-ORA-00984 : column not allowed here

mysql - 从名称首字母相同的表中选择

mysql - 涉及多个子类项的关系