如何获得具有最大价值的行?

时间:2014-09-19 08:27:12

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

我得到了这样的查询

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

并遵守条件

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

没有子查询可以处理吗?

3 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

根据您的要求:

  

“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 < 2会将结果数量限制为1行

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

答案 2 :(得分:0)

我通过跟随查询来解决自己的问题。 无论如何,我不得不使用子查询并添加一些额外的函数在上括号中使用。

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