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

How to get minimum number of records for a condition in oracle

我想根据我在where条件中给出的条件得到最少的记录数。

例如:我有一个 table 有两列(Id,值)

我的 table 有如下数据:

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

从上面table值'001'有3个Ids(1,2,3)和值'002'有2个等等。

现在我想确定具有最少 ID 的值(如本例中,它应该是只有一个 ID 的值“003”)。

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

提前致谢。

下面的查询将 select 具有最少行数的一个或多个值。在平局的情况下,所有具有相同的最小行数的值都被 selected。行数未显示,但可以轻松显示(将其添加到外部 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

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

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

如果您使用的是 Oracle 12,您可以:

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

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