如何在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中为此编写查询。?
在此先感谢。
答
以下查询将选择行数最低的值(或值)。在关系的情况下,选择具有相同的最小行数的所有值。行数不显示,但它可以很容易地显示(将其添加到外部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
如果您需要拥有所有共享最小计数的值,请将only
与with ties
。
您是否试过选择语句 –
如果有两个或更多的值与最少的id绑定,那么期望的结果是什么?如果你添加一行'Id = 11'和'Value ='005'',那么值'003'和'005'都只有一个Id。选择他们两个?只选择其中的一个(如果是这样,哪一个?任意一个,随机?)你是否还需要知道有多少个ID是最小值,例如在你的情况下计数为1? – mathguy
哪个版本的Oracle? – trincot