【问题标题】:How can I get a row which has biggest value?如何获得具有最大价值的行?
【发布时间】:2014-09-19 08:27:12
【问题描述】:

我收到这样的查询

SELECT 
  IMAGE_PATH, IMAGE_ID, DOC_NID 
FROM
  TBL_IMAGE WHERE IMAGE_ORD = 1

并且有以下条件

  • image_ord 应改为 image_ord=max 值
  • image_ord 列是数字类型,有一些重复
  • 我只需要 image_ord 值最大的一行
  • 它可以处理rownum,但我不想因为它上面有很多层。(它是子查询)

没有子查询可以处理吗?

【问题讨论】:

  • 我不太清楚:如果 "image_ord [...] 有一些重复" 而你 " 只需要一个具有最大 image_ord 值的行" 你如何区分具有相同最大值 image_ord 的各个行?
  • @SylvainLeroux 它有几行值为 1。我知道这是错误的数据库计划,但它不是序列,只是数字类型列。无论如何,当我执行“order by”时,第一行总是相同的。
  • ORDER BY 什么?如果这是ORDER BY IMAGE_ORG,则不应依赖于same IMAGE_ORG 值以任何特定顺序检索行这一事实。

标签: sql oracle sql-order-by max limit


【解决方案1】:

根据您的要求:

“image_ord [...] 有一些重复”

"我只需要 image_ord 值最大的一行"

WITH C AS ( SELECT MAX(IMAGE_ORD) M FROM TBL_IMAGE )
SELECT 
  TBL_IMAGE.IMAGE_PATH, TBL_IMAGE.IMAGE_ID, TBL_IMAGE.DOC_NID 
FROM
  TBL_IMAGE JOIN C ON IMAGE_ORD = C.M
WHERE ROWNUM < 2
  • WITH ... 语句将检索image_ord 字段的最大值
  • SELECT ... 语句将在上面的临时表上使用JOIN
  • WHERE ROWNUM &lt; 2 将结果数限制为 1 行

请注意,在没有(明确的)ORDER BY 子句的情况下,SELECT 语句的结果应被视为一组无序的行。因此,在出现重复的情况下,您不应依赖返回的任何特定行(甚至同一行)。仅 “one” 行具有最大 image_ord 值。

【讨论】:

  • 感谢您的回答。我也担心 image_ord 值的重复,但我还不知道如何避免这种情况。无论如何,我喜欢你的精彩回答,尤其是使用“with”。这使得更清晰和更好:D 非常感谢 b
【解决方案2】:

试试这个:

SELECT 
  IMAGE_PATH, IMAGE_ID, DOC_NID, Max(image_ord) 
FROM
  TBL_IMAGE WHERE IMAGE_ORD = 1 group by IMAGE_PATH, IMAGE_ID, DOC_NID

【讨论】:

  • 好吧,如果你搜索max(image_ord),那么where image_ord = 1 语句就不合适了。
  • 那么在这种情况下,仅删除 where 条件可能会有所帮助?
【解决方案3】:

我用跟随查询解决了我自己的问题。 无论如何,我不得不使用子查询并在大括号中添加一些额外的功能。

select 
  doc_nid, max(image_ord) as image_ord 
from 
  (
    select 
      doc_nid, nvl(image_ord, 0) as image_ord
    from
      tbl_image 
    where 
      doc_nid is not null
  )
group by doc_nid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    相关资源
    最近更新 更多