【问题标题】:SQL selecting minimum value in a sub query when exact value is unknown当确切值未知时,SQL 在子查询中选择最小值
【发布时间】:2013-09-11 18:29:42
【问题描述】:

我有一个 SQL 查询,旨在使用子查询从不同的表中选择一个列表。我的意思是在特定列中找到那些价值最低的东西。

这是我目前的查询。我知道最低费率是 350,但我不能在我的查询中使用它。将其更改为 MIN(rate) 的任何尝试均未成功。

  SELECT DISTINCT name
  FROM table1 NATURAL JOIN table2
  WHERE table2.code = (SELECT Code FROM rates WHERE rate = '100')

如何更改该子查询以找到最低费率?

【问题讨论】:

  • 它在同一个表中吗?你能说出那一列的名字吗?
  • 您使用的是什么关系型数据库?
  • 你为什么用 100 ?它只是一个例子,还是考虑到最低比率 =100 的真实查询?

标签: sql min


【解决方案1】:

最通用的方法是

select distinct name
from table1 natural join table2
where
    table2.code in
    (
        select t.Code
        from rates as t
        where t.rate in (select min(r.rate) from rates as r)
    )

如果你有窗口函数,你可以使用rank()函数:

...
where
    table2.code in
    (
        select t.Code
        from (
            select r.Code, rank() over(order by r.rate) as rn
            from rates as r
        ) as t
        where t.rn = 1
    )

在 SQL Server 中你可以使用top ... with ties 语法:

...
where
    table2.code in
    (
        select top 1 with ties r.Code
        from rates as r
        order by r.rate
    )

【讨论】:

    【解决方案2】:
    SELECT DISTINCT name
    FROM table1 NATURAL JOIN table2
    WHERE table2.code = 
    (SELECT CODE FROM RATE WHERE RATE=(SELECT MIN(RATE) FROM RATE))
    

    考虑到您只期望一个最小值记录。

    【讨论】:

      【解决方案3】:

      试试这个,

      WHERE table2.code = (SELECT Code FROM rates ORDER BY rate LIMIT 1)
      

      【讨论】:

        猜你喜欢
        • 2015-02-03
        • 1970-01-01
        • 2013-10-26
        • 2013-03-04
        • 2018-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        相关资源
        最近更新 更多