Вы можете сделать это в 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;
или (для более ранних версий вы можете использовать функции analyti c):
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
дБ <> скрипка Oracle 18 или Oracle 11