首页 文章

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

提问于
浏览
0

我希望根据我在条件中给出的条件获得最小数量的记录 .

例如:我有一个包含两列的表(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),值'002'有2个,依此类推 .

现在我想要识别具有最小ID的值(例如,在这个示例中,它应该是值'003',只有一个Id) .

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

提前致谢 .

3 回答

  • 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

    您可以使用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

  • 1

    如果您使用的是Oracle 12,则可以执行以下操作:

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

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

相关问题