【问题标题】:SELECT * WHERE val = MIN ( val )?选择 * WHERE 值 = 最小值(值)?
【发布时间】:2023-03-07 15:59:01
【问题描述】:

我对 Oracle SQL 还很陌生,但它的逻辑已经开始让我感到困惑。我正在尝试从特定列 PRICE 具有最小值的表中选择所有列。

这行得通:

SELECT MIN(PRICE) FROM my_tab;

这会返回最小值。但是为什么我不能选择该行中的所有列?以下将不起作用:

SELECT * FROM my_tab WHERE PRICE = MIN( PRICE );

我在这里缺少什么?干杯,伙计们!

*编辑*

这是我遇到问题的完整代码:

SELECT * FROM (SELECT c.NAME, o.* FROM customers c JOIN customer_orders o ON c.CUST_NBR = o.CUST_NBR) AS t WHERE t.PRICE = (SELECT MIN(t.PRICE) FROM t);

【问题讨论】:

  • 您不能在 select 语句的 where 子句中使用聚合。那是语法错误。
  • 这不是 Oracle 独有的——它在大多数 SQL 实现中都很常见。

标签: sql oracle select minimum


【解决方案1】:
SELECT * FROM TABLE WHERE PRICE = (SELECT MIN(PRICE) FROM TABLE)

--Edited 

WITH 
TABLE AS 
(QUERY) 
SELECT * FROM TABLE
WHERE PRICE = (SELECT MIN(PRICE) FROM TABLE)

【讨论】:

  • 这不起作用。我从中选择的表已经来自 select 语句。这会导致问题吗?我已经在评论中发布了我的代码,但由于某种原因它被删除了
【解决方案2】:

您也可以使用子查询来获取结果:

select t1.*
from my_tab t1
inner join
(
  SELECT MIN(PRICE) MinPrice
  FROM my_tab
) t2
  on t1.price = t2.minprice

【讨论】:

    【解决方案3】:

    请参阅之前的 SO question,尤其是最适合您的目的的“Vash”回答。请注意,您可能希望避免子选择,因为 Oracle 可能足够聪明,可以使用价格索引(如果可以查看一条记录)。

    大多数数据库,但显然不是 Oracle,对于此类问题都有 TOP 1LIMIT 子句。

    【讨论】:

      猜你喜欢
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2019-05-09
      • 2014-12-01
      • 1970-01-01
      • 2010-10-21
      • 2014-01-21
      相关资源
      最近更新 更多