我在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
我如何获得这些输出?
答案 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 x
或LIMIT 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