小编Hal*_*oKu的帖子

如何在presto中取两个值之间的最大值?

我有以下查询:

select id, table1.date1, table2.date2, table1.name
from table1
join table2 using (id)
Run Code Online (Sandbox Code Playgroud)

我还想有另一列,MAX(table1.date1, table2.date2)但我没有找到正确的语法。我不希望 MAX 遍历表中的所有行并取 MAX() 我希望它从行中指定的两个值中选择最大值。

例子:

id  date1       date2    name    max
1 2020-01-01 2020-04-01   A    2020-04-01
2 2019-02-01 2020-01-03   B    2020-01-03
3 2019-02-01    null      c    2019-02-01
Run Code Online (Sandbox Code Playgroud)

我也不能分组,因为我不想在这里分组任何东西。更类似于coalesce 给出值的函数列表并从中选择最大值

sql presto

6
推荐指数
1
解决办法
3865
查看次数

如何在 Snowflake 中将数组与字符串连接

我有两张桌子:

Books带列tag_ids(数组)

Tags带列tag_id(Varchar)

我有一个可视化工具需要将这些表连接在一起。我唯一可以控制的是连接条件。问题是我找不到办法让这个连接起作用。

这是我尝试过的:

FROM "PUBLIC"."BOOKS"
LEFT JOIN "PUBLIC"."TAGS" ON (  "tag_ids" =  TO_ARRAY("tag_id")) 
Run Code Online (Sandbox Code Playgroud)

这只适用于只有一个元素的数组。它不适用于以下情况:

标签 ID =

[
  "211d1383-13a6-4bef-85d1-bf5eda11c8a7",
  "2f6c332e-4726-4425-b364-e668e0f56582"
]
Run Code Online (Sandbox Code Playgroud)

标签 ID =

 ["211d1383-13a6-4bef-85d1-bf5eda11c8a7"]
Run Code Online (Sandbox Code Playgroud)

尝试做:

FROM "PUBLIC"."BOOKS"
LEFT JOIN "PUBLIC"."TAGS" ON ( ARRAYS_OVERLAP ("tag_ids" ,  TO_ARRAY("tag_id")) = TRUE ) ) 
Run Code Online (Sandbox Code Playgroud)

我不知道这是否有效,但它确实是 certisian 产品并且需要 15+ 才能运行,所以我无论如何都不能使用它。

我要找的基本上是问

if tag_id exist in tag_ids
Run Code Online (Sandbox Code Playgroud)

我确信有一个简单的解决方案。

sql snowflake-cloud-data-platform

5
推荐指数
2
解决办法
5712
查看次数

如何使用上下值按字母顺序对字符串列表进行排序?

我有以下代码:

v = ['zack', 'timor', 'Topher']
v.sort()
print(v)
Run Code Online (Sandbox Code Playgroud)

['托弗','帝汶','扎克']

我想得到的是:

['帝汶','托弗','扎克']

这是正确的字母顺序。

基本上它应该忽略小写字母和大写字母之间的区别。我不能只做 lower() 因为['timor','topher', 'zack']不是想要的输出。

简单来说,我希望它与此规则进行比较: a=A, b=B, ... 我该怎么做?

python

3
推荐指数
1
解决办法
62
查看次数

如何在 Presto SQL 中为每个类别提取 3 条随机记录?

我有下表:

category_id  name
    5         rob
    5         james
    5         kobert
    5         ken
    4         jef
    3         rok
Run Code Online (Sandbox Code Playgroud)

我想编写一个查询,为每个类别提供随机 3 个名称。

例如,可能的输出可以是:

category_id  name
    5         rob
    5         james
    5         ken
    4         jef
    3         rok
Run Code Online (Sandbox Code Playgroud)

我知道它应该是这样的:

SELECT category_id, name
FROM(
    SELECT category_id, name, RANDOM() Over (Partition By category_id) rn
    FROM dataset )
WHERE rn<=3
Run Code Online (Sandbox Code Playgroud)

但我找不到执行此操作的正确语法。它给了我

非窗函数:随机

sql presto

1
推荐指数
1
解决办法
7244
查看次数