如何解决分区时使用 PostgreSQL 大小写
我正在尝试使用带有分区的 Case when
创建一个新行并标记它是否重复
我想要的输出如下
我正在使用的查询
我在这里找不到错误。之前在 sql Server 中好像可以用
SELECT *,CASE
WHEN ROW_NUMBER() OVER (PARTITION BY
x,y > 1) THEN TRUE ELSE FALSE
END AS is_duplicated
FROM users
解决方法
正如其他两个答案所指出的,>
不是 partition by
的一部分。
我想首先指出,在不使用 row_number()
的情况下使用 order by
是非常非常不鼓励的。如果没有 order by,每次运行的结果可能不同。
更重要的是,您不想要row_number()
。您需要 count()
-- 因为您需要在 所有 行中存在重复项的 TRUE
。
第二个是完全不需要 case
表达式,因为 Postgres 有一个布尔类型。
所以:
SELECT u.*,(COUNT(*) OVER (PARTITION BY x,y) > 1) AS is_duplicated
FROM users u;
Here 是一个 dbfiddle。
,我猜你把括号放错了。你可以试试CASE WHEN ROW_NUMBER() OVER (PARTITION BY x,y) > 1 THEN TRUE ELSE FALSE END
吗?
顺便说一句,在 PostgreSQL 中,我猜你也可以这样写:
SELECT
*,(ROW_NUMBER() OVER (PARTITION BY x,y) > 1) AS is_duplicated
FROM
users
请注意,如果您想确保将正确的行标记为重复行,您可能还需要在 ORDER BY
子句中包含一个 OVER
。
顺便说一下,在 Microsoft SQL Server 中测试此查询时,如果我省略 ORDER BY
子句中的 OVER
,我会收到一条错误消息。然而,它在 PostgreSQL 中没有 ORDER BY
的情况下也能正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。