我希望根据我在条件中给出的条件获得最小数量的记录。
对于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中为此编写查询。?
提前致谢。
答案 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
。