首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用浮点数理解递归cte

用浮点数理解递归cte
EN

Stack Overflow用户
提问于 2021-06-23 02:01:54
回答 1查看 116关注 0票数 1

我想要创建一些数据的直方图,但我使用的工具没有直方图工具,而只是一个条形图表工具。为此,我需要填补空白,自己创造垃圾桶。我试图用递归的cte和左联接来完成这个任务(对于SQL来说非常新,所以如果术语不是重点的话,很抱歉)。我似乎能够用整数做我想做的事,但是当我移到实数时会遇到问题。

我在这里解释了四个例子。

  1. 生成一个n为0到500,步长为1的表,基本上没有问题,除了一个步长从0到50,步长为0.1的表。

  1. 另一个表,步骤大小为0.1,从0到9。工作性能很好,但不是我想要的范围。

  1. 一使用n>=10就不再工作了。

在SELECT语句中使用

  1. ,而不是使用0.0。不起作用。

问题:

  1. 如何生成一个表,其中n的行数从0到50,步长为0.1?
  2. ,为什么我必须在选择x中使用任意数量的小数位数?对于0.1的步长,我需要输入0.0,对于0.01,我需要输入0.00.

备注:

  • 我知道直方图不应该真的有501个箱子,但是数据有几个有趣的部分,所以它习惯于“放大”到粒子区域。

  • --我已经看到递归有1000行的限制,但这低于这个限制,因此不能理解错误。

1.Works (返回501行):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WITH RECURSIVE cte1 (n) AS
(
  SELECT 0
  UNION ALL
  SELECT n + 1 FROM cte1 WHERE n < 500
)
SELECT * FROM cte1;

2.Works (返回91行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WITH RECURSIVE cte1 (n) AS
(
  SELECT 0.0
  UNION ALL
  SELECT n + 0.1 FROM cte1 WHERE n < 9
)
SELECT * FROM cte1;

3.不工作(回复Error Code: 1264. Out of range value for column 'n' at row 1):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WITH RECURSIVE cte1 (n) AS
(
  SELECT 0.0
  UNION ALL
  SELECT n + 0.1 FROM cte1 WHERE n < 10
)
SELECT * FROM cte1;

4.不工作(响应Error Code: 3636. Recursive query aborted after 1001 iterations. Try increasing @@cte_max_recursion_depth to a larger value.):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WITH RECURSIVE cte1 (n) AS
(
  SELECT 0
  UNION ALL
  SELECT n + 0.1 FROM cte1 WHERE n < 9
)
SELECT * FROM cte1;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-23 02:28:11

从医生那里:

https://dev.mysql.com/doc/refman/8.0/en/with.html#common-table-expressions-recursive

CTE结果列的类型是从非递归SELECT部分的列类型推断出来的,而且这些列都是可空的。对于类型确定,将忽略递归选择部分。

在您的例子中,它查看SELECT 0.0并假设它是DECIMAL(2,1),这就是为什么它在浮点数之前或之后不允许超过1位的原因。

因此,您需要向解析器提供一个提示,说明您到底想要哪种类型:

SELECT CAST(0 AS DECIMAL(3,1))SELECT CAST(0 as float)

这样它就能工作了。

希望这能回答你们的两个问题。

Upd. #4不能工作,因为在每次迭代时,它都将结果转换为整数,0+ 0.1变为0。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68097675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文