Oracle SQL - Max from Group by with limit



我有以下数据:

Table: CROSS_REF
DEPT LOC TRAN
100  A1   10
100  A2   10
100  A3   20

传输20的最大计数为1,传输10的最大计数为2。

我需要返回这个数据:

TRAN
10

怎么做?

在Oracle 12c中,您可以使用:

SELECT tran
FROM   cross_ref
GROUP BY tran
ORDER BY COUNT(*) DESC
FETCH FIRST ROW ONLY;

对于样本数据:

CREATE TABLE cross_ref(DEPT, LOC, TRAN) AS
SELECT 100, 'A1', 10 FROM DUAL UNION ALL
SELECT 100, 'A2', 10 FROM DUAL UNION ALL
SELECT 100, 'A3', 20 FROM DUAL

输出:

<表类>TRANtbody><<tr>10

您正在寻找的值在统计学中称为模式, Oracle有一个函数stats_mode()来计算这个值。假设您想要每个部门的值:

SELECT dept, stats_mode(tran)
FROM cross_ref
GROUP BY dept;

如果你想要整体模式:

SELECT stats_mode(tran)
FROM cross_ref;

这是一个db<>小提琴

最新更新