查询在 table 中查找第二个最常见的单词(oracle sql)

query to find the second most common word in a table (oracle sql)

所以我有 table 名员工,如下所示

ID | name | department
---|------|-----------
1  | john | home
2  | alex | home
3  | ryan | tech

我正在尝试按部门编号对这些进行分组并显示计数。但我正在尝试 select 第二个最常见的,在这种情况下它应该 return (技术 1)。感谢任何有关如何解决此问题的帮助。

编辑:

只用了MINUS,上网查了一下LIMIT还不太熟悉

我们可以使用 COUNTDENSE_RANK:

WITH cte AS (
    SELECT department, COUNT(*) AS cnt,
           DENSE_RANK() OVER (ORDER BY COUNT(*) DESC) rnk
    FROM yourTable
    GROUP BY department
)

SELECT department, cnt
FROM cte
WHERE rnk = 2;

从 Oracle 12c 开始,您可能会发现以下限制查询令人满意:

SELECT department, COUNT(*) AS cnt
FROM yourTable
GROUP BY department
ORDER BY COUNT(*) DESC 
OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY;

但是这种限制方法不能很好地处理例如第一名可能有 2 个或更多部门的关系。 DENSE_RANK 在处理此类边缘情况方面做得更好。