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

问题描述:

我希望根据自己的条件获取最少的记录条数我在哪里条件下给出。如何在oracle中获取条件的最小记录数

为前:我有两列(ID,价值)

我的表具有数据像以下的表:

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

从上面的表格值 '001' 具有3点的ID(1 ,2,3)和值'002'有2等等。

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

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

在此先感谢。

+0

您是否试过选择语句 –

+0

如果有两个或更多的值与最少的id绑定,那么期望的结果是什么?如果你添加一行'Id = 11'和'Value ='005'',那么值'003'和'005'都只有一个Id。选择他们两个?只选择其中的一个(如果是这样,哪一个?任意一个,随机?)你是否还需要知道有多少个ID是最小值,例如在你的情况下计数为1? – mathguy

+0

哪个版本的Oracle? – trincot

以下查询将选择行数最低的值(或值)。在关系的情况下,选择具有相同的最小行数的所有值。行数不显示,但它可以很容易地显示(将其添加到外部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 
+0

谢谢mathguy,..这符合我的目的 – Santosh

您可以通过计数使用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

如果你是在甲骨文12,你可以这样做:

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

如果您需要拥有所有共享最小计数的值,请将onlywith ties