我是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
感谢您的时间。
答案 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