如何使用一个查询仅获取具有子查询的列的最大行?

时间:2014-10-30 03:07:08

标签: sql oracle

this question非常相似,我希望只有一行是列的最大值。使用表时,所有这些解决方案似乎都很有用,但我尝试使用子查询来完成此操作。我想将此问题归结为一个问题。

我想到的两个方法是:a)使用临时表,或b)复制子查询代码。临时表方法很简单,但强制我使用多个查询。重复的代码也可以,但是,它......重复的代码。

我想要做的是在子查询中的INTO行,所以我可以重用该子查询中的信息:

select ...
from (
    select ..., count(someColumn) as countColumn
    into #tempTable
    where ...
    group by ...
)
where countColumn = (select max(countColumn) from #tempTable)

但显然不允许......

这可以在一个查询中完成,而不重复我的子查询吗?

1 个答案:

答案 0 :(得分:1)

使用CTE怎么样?

with t as (
      select . . ., count(someColumn) as countColumn
      where . . .
      group by . . . .
     )
select *
from t
where countColumn = (select max(CountColumn from t);

您也可以使用分析函数执行此操作:

select *
from (select . . ., count(someColumn) as countColumn,
             max(count(someColumn)) over () as maxcountColumn
      where . . .
      group by . . .
     ) t
where countColumn = maxcountColumn;