我有一个数字想在 Presto 中将其格式化为百分比。我想将 0.18932 格式化为 18.93%。
我试过:
format('%s%%', decimal_number*100)
format('%s%%', round((a.decimal_number*100), 2))
Run Code Online (Sandbox Code Playgroud)
这是结果:无格式:0.019435618第一种方法:1.9435618000%第二种方法:1.9400000000%
任何更简单的方法将其格式化为 1.94%
我有不同大小的数组,我希望数组中的每个值位于单独的行中。为此,我使用了交叉连接取消嵌套。但是它正在工作,它正在删除空数组。
因此,当我这样做时,我的列 ID 包含不同的数组,其中一些为空
select *
from table
cross join unnest (t.id) as t(order_id)
where length(order_id) = 5 or order_id is NULL
Run Code Online (Sandbox Code Playgroud)
我只得到以下结果
| ID | 订单号 |
|---|---|
| 23deo jfr32 6582w | 23deo |
| 23deo jfr32 6582w | 杰夫32 |
| 23deo jfr32 6582w | 6582瓦 |
而且我要
| ID | 订单号 |
|---|---|
| 23deo jfr32 6582w | 23deo |
| 23deo jfr32 6582w | 杰夫32 |
| 23deo jfr32 6582w | 6582瓦 |
| 无效的 | 无效的 |
如果有人知道如何取消嵌套空值,我们将不胜感激。我一直在互联网上查找,我发现我们可以包含一个WITH ORDINALITY 子句,但我不知道它是如何工作的。
我有一个很长的字符串,我想将它半唯一地表示为一个 bigint。理想情况下,我只取散列,但presto 散列函数似乎想要返回“varbinary”,而且我找不到将 varbinary 转换为 bigint 的函数。
如果我写:
cast(xxhash64(cast('asdf' as varbinary)) as bigint)
我收到一条错误消息,说我无法将 varbinary 转换为 bigint。
我无法访问我在 Presto 中创建的行对象的字段。Presto 文档声称“字段......使用字段引用运算符访问”。但是,这似乎不起作用。这段代码重现了这个问题:
CREATE TABLE IF NOT EXISTS data AS
SELECT * FROM (VALUES
(1, 'Adam', 17),
(2, 'Bill', 42)
) AS x (id, name, age);
CREATE TABLE IF NOT EXISTS ungrouped_data AS
WITH grouped_data AS (
SELECT
id,
ROW(name, age) AS name_age
FROM data
)
SELECT
id,
name_age.1 AS name,
name_age.2 AS age
FROM grouped_data;
Run Code Online (Sandbox Code Playgroud)
它返回“无关输入'.1'”错误。
我在 sql 查询中使用了下表。

我想把它变成下面的形状

我该怎么做呢?我使用了 unnest 和 cross join 。由于数组为空,我没有看到整个视图。
我有一个包含用户名(约 1 000 行)的表,称为“潜在用户”,另一个表称为“实际用户”(约 1000 万行)。所有记录都完全由 [az] 字符组成,没有空格。此外,我知道实际用户表中没有潜在用户。
我希望能够根据 Levenshtein 距离,计算 possible_users 中的每一行,actual_users 中最接近的记录是什么。例如:
| potential_users|
|----------------|
| user1 |
| kajd |
| bbbbb |
Run Code Online (Sandbox Code Playgroud)
和
| actual_users |
|--------------|
| kaj |
| bbbbbbb |
| user |
Run Code Online (Sandbox Code Playgroud)
将返回:
| potential_users | actual_users | levenshtein_distance |
|-----------------|--------------|----------------------|
| user1 | user | 1 |
| kajd | kaj | 1 |
| bbbbb | bbbbbbb | 2 |
Run Code Online (Sandbox Code Playgroud)
如果表很短,我可以创建一个交叉联接,计算潜在用户中的每条记录与实际用户中的编辑距离,然后返回具有最低值的记录。然而,在我的例子中,这将创建一个 1 000 x 10 000 000 行的中间表,这有点不切实际。
是否有更干净的方法通过创建交叉连接来执行此类操作?
我尝试了以下方法
IF(X IS NULL,0,X) --不捕获 NaN
IF(X IS NaN,0,X) --输入“nan”不匹配
IF(X = NaN,0,X) --无法解析列“nan”
IF(X = 'NaN',0,X) --'=' 不能应用于 double、varchar(3)