在 Snowflake 中,我尝试创建一个带有 for 循环的 SQL 脚本,该脚本根据 data_type 列将结果输出到新表中
我有一个名为 PROFILE_TABLE_LIST 的表,其中的列具有表名和列名以及数据类型,如下所示:
| 表名 | COLUMN_NAME | 数据类型 |
|---|---|---|
| 表格1 | 植物 | 文本 |
| 表格1 | 高度 | 漂浮 |
| 表2 | 颜色 | 文本 |
| 表2 | 闻 | 文本 |
我目前正在尝试使用游标执行 for 循环,并对每一行执行查询,以根据列类型分析表,如下所示:
| 表名 | COLUMN_NAME | 数据类型 | 数数 | 最长长度 | MAX_VALUE |
|---|---|---|---|---|---|
| 表格1 | 植物 | 文本 | 10 | 82 | 无效的 |
| 表格1 | 高度 | 漂浮 | 10 | 无效的 | 58.6 |
| 表2 | 颜色 | 文本 | 20 | 56 | 无效的 |
| 表2 | 闻 | 文本 | 20 | 23 | 无效的 |
最终,我想根据 data_type 运行不同的 select 语句,但在这个阶段,我只关注计数。这是我当前的循环。但是,由于表名作为字符串传递,因此 select 语句无法正确执行,如果我使用 TABLE(tablename) ,我会收到语法错误(我在下面注释掉了该行:
declare
tablename string;
column_name string;
row_count integer;
table_schema string;
table_catalog string; …Run Code Online (Sandbox Code Playgroud) 是否有一个查询将返回列中的单词总数?我找到了一些代码,可以让我计算字符串中的单词,但不能将它应用于整个列.
我首先创建了从http://www.sql-server-helper.com/functions/count-words.aspx找到的函数:
CREATE FUNCTION [dbo].[WordCount] ( @InputString VARCHAR(4000) )
RETURNS INT
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @PrevChar CHAR(1)
DECLARE @WordCount INT
SET @Index = 1
SET @WordCount = 0
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@InputString, @Index, 1)
SET @PrevChar = CASE WHEN @Index = 1 THEN ' '
ELSE SUBSTRING(@InputString, @Index - 1, 1)
END
IF @PrevChar = ' ' AND @Char != ' '
SET @WordCount = @WordCount + 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在字典imdb_dict中找到最正和最负的值:
imdb_dict = {'the': '0.0490972013402',
'and': '0.201363575849',
'a': '0.0333946807184',
'of': '0.099837669572',
'to': '-0.0790210365788',
'is': '0.188660139871',
'it': '0.00712569582356',
'in': '0.109215821589',
'i': '-0.154986397986'}
Run Code Online (Sandbox Code Playgroud)
使用此处找到的代码: 获取字典中具有最大值的键?
我可以使用以下方法获得字典的最大值:
imdb_dict = {'the': '0.0490972013402',
'and': '0.201363575849',
'a': '0.0333946807184',
'of': '0.099837669572',
'to': '-0.0790210365788',
'is': '0.188660139871',
'it': '0.00712569582356',
'in': '0.109215821589',
'i': '-0.154986397986'}
Run Code Online (Sandbox Code Playgroud)
但是,我找不到在字典中获得最大负值的方法,因为使用min会显示最接近0的值。是否可以通过修改运算符来获得最大负值的方法,还是有一种更简单的方法来完成该操作?