gpt4 book ai didi

SQL使用CASE WHEN检查分区中是否存在没有任何JOIN的值

转载 作者:行者123 更新时间:2023-12-03 16:40:36 25 4
gpt4 key购买 nike

我真的坚持这一点。

我有一个外观相似的表格,其中包含更多可能的页面、ID 和其他列,但这些是我坚持使用的那些。

+--------+-------+------+--+
| page | id | time | |
+--------+-------+------+--+
| Page1 | A | 1 | |
| Page2 | A | 3 | |
| Page3 | A | 5 | |
| Page1 | A | 3 | |
| Page5 | A | 4 | |
| Page6 | B | 3 | |
| Page6 | B | 7 | |
| Page4 | B | 4 | |
+--------+-------+------+--+

我的目标是检查页面是否出现在 id 的分区中,如果这是真的,那么在新列中为组的每一行放置 1。

例如如果我试图检查“Page4”,它应该看起来像这样。
+--------+-------+------+-----------+
| page | id | time | condition |
+--------+-------+------+-----------+
| Page1 | A | 1 | 0 |
| Page2 | A | 3 | 0 |
| Page3 | A | 5 | 0 |
| Page1 | A | 3 | 0 |
| Page5 | A | 4 | 0 |
| Page6 | B | 3 | 1 |
| Page6 | B | 7 | 1 |
| Page4 | B | 4 | 1 |
+--------+-------+------+-----------+

我想用 CASE WHEN因为我稍后会写更复杂的条件。对我来说最烦人的部分是我不能使用任何 JOIN因为在使用临时表时出现权限错误。

目前我希望它是这样的,但是这个不起作用,给了我语法错误:
SELECT *,
CASE WHEN page = 'Page4' OVER (PARTITION BY id) THEN 1 ELSE 0 END as condition
FROM my_table

有什么方法可以使用 CASE WHEN通过id检查分区的任何行中是否存在该值陈述?或者也许还有其他一些我没有看到的解决方案?

附言如果重要的话,我正在使用 Redshift。

我真的很感激一些帮助。

最佳答案

你想要这样的逻辑:

SELECT t.*,
MAX(CASE WHEN page = 'Page4' THEN 1 ELSE 0 END) OVER (PARTITION BY id) as condition
FROM my_table t;

你有正确的想法。语法有点差。

关于SQL使用CASE WHEN检查分区中是否存在没有任何JOIN的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51294055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com