Oracle STATS_MODE返回随机(?)号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle STATS_MODE返回随机(?)号相关的知识,希望对你有一定的参考价值。
我正在使用STATS_MODE
获取列的模式,我手动检查我的数据与结果但没有模式,每个值都是唯一的。
那么没有模式时Oracle会做什么?对我来说,它看起来只是返回一个随机数。如果没有模式,有没有办法获得MAX值?
答案
手册没有明确说明行为是确定性的......
STATS_MODE将一组值作为其参数,并返回以最大频率发生的值。如果存在多个模式,则Oracle数据库会选择一个模式并仅返回该值。
你可以轻松测试这个,并返回最大值:
select stats_mode(n) as oracle_stats_mode
,case when count(n) = count(distinct n) -- If all records are unique
then max(n) -- return the max
else stats_mode(n) -- else return oracle's stats_mode
end as your_stats_mode
from (select 1 as n from dual union all
select 2 as n from dual union all
--select 2 as n from dual union all
--select null as n from dual union all
select 3 as n from dual
);
尝试使用和不使用重复的n = 2和n = null。还要注意count(*)和count(n)的行为会有所不同。
另一答案
stats_mode
将返回多次出现的值,因此,如果您有唯一值,那么为什么要使用它?从oracle doc然而你可以调整此查询以获得最大值
SELECT commission_pct FROM
(SELECT commission_pct, COUNT(commission_pct) AS cnt1 FROM employees
GROUP BY commission_pct)
WHERE cnt1 =
(SELECT MAX (cnt2) FROM
(SELECT COUNT(commission_pct) AS cnt2
FROM employees GROUP BY commission_pct));
另一答案
那么没有模式时Oracle会做什么?
如果列的所有值都是NULL
s STATS_MODE
returns NULL
。
如果列中存在至少一个值,则存在MODE
always。
在某些情况下,有更多键具有最高频率(也称为MODE)。在这种情况下,返回这些键的一些(非确定性)值。因此,您可能会观察到随机行为,但仅限于频率最高的键。
以上是关于Oracle STATS_MODE返回随机(?)号的主要内容,如果未能解决你的问题,请参考以下文章