如何在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
。
我想根据我在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
。