database - TDengine子查询核心转储

标签 database

我正在做一个使用TDengine的项目,最近的工作需要做一些子查询。我在做TDengine的子查询实验,遇到了以下问题

taos> select avg(col2) from stb where col1 > (select avg(col1) from stb);
DB error: syntax error near "select avg(col1) from stb);" (0.000149s)

taos> select avg(col2), (select last(ts) from stb_54) as ts_spec from stb;
DB error: syntax error near "select last(ts) from stb_54) as ts_spec from (0.000092s)

taos>select max(col3) from (select spread(col3) as col3 from stbgroup by tbname);
Segmentation fault (core dumped)

TDengine支持子查询吗?是否有我需要遵循的语法?

最佳答案

根据其官方文档,TAOS SQL与MYSQL略有不同,因为它是面向IOT海量数据处理场景的。它提供了一种标准的SQL风格的语言,使用户可以在不支持MySQL所有通用功能的情况下快速上手。

( https://www.taosdata.com/en/documentation/taos-sql )

  1. 'FROM 关键字后面可以跟几个表 (STables) 的列表或子查询的结果'。 TAOS SQL只支持FROM关键字后的子查询,不支持作为WHERE子句参数的子查询,你可以尝试修改SQL的语法为:

taos> select avg(col2) from (select * from sub where col1>AVG(col1));

数据库错误:无效操作:不支持普通列连接(0.000118s)

结果显示TAOS还不支持column join(where子句中的平均操作)。所以分为两部分:

(1)计算并记录col1的平均值avg1

taos> 从子中选择 AVG(col1);

(2) 将平均值设为常数

taos> select avg(col2) from (select * from sub where col1>avg1);

  1. 同1的情况,TAOS SQL不支持多选语法。

  2. 经过大量测试,我发现 MAX() 函数可能存在一些不合理的问题,解决此问题的最简单方法是改用 TOP() 函数:

taos> select top(col3,1) from (select spread(col3) as col3 from stb group by tbname);

关于database - TDengine子查询核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68412474/

相关文章:

C# 删除数据库失败

php - SQL Union 只计算一个查询

sql - 如何编写查询以在连接两个表时仅获取第一个匹配行?

javascript - 转换数据以制作 Google 图表

python - 如何更新已安装的模块路径?奥多

php - 重复查询

mysql - 具有 3000 万条目的表速度很慢。优化MySQL还是改用mongodb?

database - 如何使用 DBI 从数据库中获取单个计数值?

mysql - 有人用Node.JS更新MySQL吗

sql - 将 MSSQL 创建的数据库连接到 PostgreSQL