如何在SQL的ARRAY中获得最频繁的值?

时间:2020-01-15 18:42:29

标签: sql oracle oracle11g

我是SQL的新手。

我建立了一个数组,在其中存储了我一直在循环中收集的值并将它们除以其他值。

该数组具有正确的值。

现在,我需要获得此数组中重复次数最多的值。

SQL可能吗? 我的环境是Oracle 11。

这是数组:

type array_type is varray(100) of NUMBER(10);
loop_results array_type := array_type();

值:

 1: 906450
 2: 906450
 3: 306449
 4: 906446
 5: 306450
 6: 906447
 7: 306449
 8: 306448
 9: 306448
10: 306450

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

首先,数组是pl / sql的一部分。同样尝试以下方法。使用临时表,下面的内容会比较容易。

(timestep, batch, features)

答案 1 :(得分:1)

如果在SQL范围中声明了类型,则可以在SQL中完成此操作:

CREATE TYPE array_type is varray(100) of NUMBER(10);

然后(Oracle 12+解决方案)

SELECT COLUMN_VALUE,
       COUNT(*)
FROM   TABLE(
         array_type(
           906450,
           906450,
           306449,
           906446,
           306450,
           906447,
           306449,
           306448,
           306448,
           306450
         )
       )
GROUP BY COLUMN_VALUE
ORDER BY COUNT(*) DESC
FETCH FIRST 1 ROW WITH TIES;

或(对于较早的版本,您可以使用解析函数):

SELECT value,
       cnt
FROM   (
  SELECT COLUMN_VALUE AS value,
         COUNT(*) As cnt,
         DENSE_RANK() OVER ( ORDER BY COUNT(*) DESC ) AS rnk
  FROM   TABLE(
           array_type(
             906450,
             906450,
             306449,
             906446,
             306450,
             906447,
             306449,
             306448,
             306448,
             306450
           )
         )
  GROUP BY COLUMN_VALUE
)
WHERE  rnk = 1;

输出所有与最高频率相关的值:

COLUMN_VALUE | COUNT(*)
-----------: | -------:
      306449 |        2
      906450 |        2
      306450 |        2
      306448 |        2

db <>提琴Oracle 18Oracle 11