使用SQL窗口函数后的过滤

问题描述 投票:0回答:1

为什么我不能按照下面的方法做,最好的选择是什么?

SELECT    year,
          category,
          name,
          count() OVER (PARTITION by name) AS count
FROM      nobel_prizes
WHERE     count = 2
ORDER BY  count DESC

我得到:

(sqlite3.OperationalError) misuse of aliased window function count

如果我过滤聚合函数的列值以外的其他内容,它就会起作用。有人可以举个例子来说明为什么他们可能禁止后者吗?会允许不好的事情发生吗?

这发生在使用 ipython-sql 的 jupyter 笔记本中。

注意:我见过有关在 WHERE 子句中使用窗口函数的问题,但没有看到相反的问题。

我是 SQL 新手,请多多指教!

sql sqlite where-clause window-functions
1个回答
0
投票

标准 SQL 不允许在

WHERE
子句中引用列别名。施加此限制是因为当评估
WHERE
子句时,列值可能尚未确定。

您也可以按照以下方式进行操作:

SELECT *
FROM (
  SELECT    year,
          category,
          name,
          count() OVER (PARTITION by name) AS count
  FROM      nobel_prizes
)
WHERE     count = 2
ORDER BY  count DESC
© www.soinside.com 2019 - 2024. All rights reserved.