查询在 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
还不太熟悉
我们可以使用 COUNT
和 DENSE_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
在处理此类边缘情况方面做得更好。
所以我有 table 名员工,如下所示
ID | name | department
---|------|-----------
1 | john | home
2 | alex | home
3 | ryan | tech
我正在尝试按部门编号对这些进行分组并显示计数。但我正在尝试 select 第二个最常见的,在这种情况下它应该 return (技术 1)。感谢任何有关如何解决此问题的帮助。
编辑:
只用了MINUS
,上网查了一下LIMIT
还不太熟悉
我们可以使用 COUNT
和 DENSE_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
在处理此类边缘情况方面做得更好。