我有以下查询:
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 给出值的函数列表并从中选择最大值
我有两张桌子:
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)
我确信有一个简单的解决方案。
我有以下代码:
v = ['zack', 'timor', 'Topher']
v.sort()
print(v)
Run Code Online (Sandbox Code Playgroud)
['托弗','帝汶','扎克']
我想得到的是:
['帝汶','托弗','扎克']
这是正确的字母顺序。
基本上它应该忽略小写字母和大写字母之间的区别。我不能只做 lower() 因为['timor','topher', 'zack']不是想要的输出。
简单来说,我希望它与此规则进行比较: a=A, b=B, ...
我该怎么做?
我有下表:
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)
但我找不到执行此操作的正确语法。它给了我
非窗函数:随机