如何在oracle中获取条件的最小记录数

时间:2017-07-13 21:38:01

标签: oracle top-n

我希望根据我在条件中给出的条件获得最小数量的记录。

对于ex:我有一个包含两列(Id,Value)的表

我的表格包含以下数据:

Id   Value
 1    001
 2    001
 3    001
 4    002 
 5    002
 6    003 
 7    004
 8    004 
 9    004
 10   004

从上表中的数值' 001'有3个Ids(1,2,3)和Value' 002'有2个等等。

现在我想确定具有最小ID的值(例如,在这个例子中,它应该是Value' 003'只有一个ID)。

如何在Oracle中为此编写查询。?

提前致谢。

3 个答案:

答案 0 :(得分:1)

下面的查询将选择行数最少的值(或多个值)。在tie的情况下,选择具有相同,最小行数的所有值。行计数未显示,但可以轻松显示(将其添加到外部select)。

真正的工作是在聚合子查询中完成的。除了值和行数之外,我们还计算分析函数min(count(*)) - 在整个聚合结果上,因此分析子句实际上是空的:over ()

select value
from   (
         select   value, count(*) as cnt, min(count(*)) over () as min_cnt
         from     your_table
         group by value
       )
where  cnt = min_cnt

答案 1 :(得分:1)

您可以使用GROUP BY,按计数排序,最后选择第一行

SELECT * FROM (
  SELECT value, count(*) as cnt
  FROM sometable
  GROUP BY value
  ORDER BY count(*)
) WHERE ROWNUM = 1

sqlfiddle:http://sqlfiddle.com/#!4/e5f075/1

答案 2 :(得分:1)

如果您使用的是Oracle 12,则可以执行以下操作:

select   value, count(*)
from     mytable
group by value
order by 2
fetch first 1 rows only

如果您需要拥有共享最小数量的所有值,请将only替换为with ties