在Oracle

时间:2016-01-05 16:38:47

标签: sql oracle oracle12c

我在Oracle(12c)中有一个包含许多列的表,其中一个表列是'Color'。 “颜色”不是该表的主键的一部分。目前,Color列值如下:

Color Column Values
red
red
green
green
green
blue
blue
blue
blue
pink

我需要上述数据中的两个信息

i)中。输出如下

color    Freq
red        2
green      3
blue       4
pink       1

ⅱ)。表格数据中“颜色”的最高频率,即

blue 4

我如何获得这些输出?

3 个答案:

答案 0 :(得分:1)

这是一个简单的聚合加上一个Windowed Aggregate来找到max:

select color, freq
from
 ( select
      color, 
      count(*) freq, 
      max(count(*)) over () as max_freq
    from tab
    group by color
 ) dt
where freq = max_freq

答案 1 :(得分:1)

在Oracle 12c上,您可以为top-n查询使用新语法:
https://oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1#top-n

此新语法类似于其他数据库中的SELECT TOP xLIMIT x

SELECT Color, count(*)
FROM table1
GROUP BY Color
ORDER BY count(*) DESC
FETCH FIRST ROW ONLY;

答案 2 :(得分:0)

for i

select color, count(*) freq
from your_table
group by color

for ii

select color, freq 
from
(
select color, freq, max(freq) over() max_freq
from
(
select color, count(*) freq
from your_table
group by color
)
)
where freq = max_freq