按Oracle SQL中可重复值的出现次数进行分组

时间:2014-06-05 11:44:33

标签: sql oracle group-by

让我们假设我们有一个这样的表。

      id  name  value

      1    x     12

      2    x     23

      3    y     47

      4    x     18

      5    y     29

      6    z     45

      7    y     67

按名称执行普通组会产生我们

按名称从表组中选择名称,计数(*);

     name  count(*)

      x      3
      y      3
      z      1

我想反过来..即。对发生设定次数的名称数进行分组。我希望我的输出是

     count    number of elements occuring count times
       1              1
       3              2

是否可以仅使用一个查询来执行此操作?另一种方法是使用临时表,但我不想这样做。

由于

2 个答案:

答案 0 :(得分:0)

您还需要一个group by

select cnt, count(*), min(name), max(name)
from (select name, count(*) as cnt
      from table
      group by name
     ) n
group by cnt
order by 1;

我一直在进行这些类型的直方图查询。 min()max()提供了示例数据。这对于理解异常值和意外值很有用。

答案 1 :(得分:0)

您可以GROUP BY 两次,例如

with
  Names as (
    select name as name,
           count(1) as cnt
      from MyTable
  group by name)

  select count(1),
         cnt 
    from Names
group by cnt