我想要创建一些数据的直方图,但我使用的工具没有直方图工具,而只是一个条形图表工具。为此,我需要填补空白,自己创造垃圾桶。我试图用递归的cte和左联接来完成这个任务(对于SQL来说非常新,所以如果术语不是重点的话,很抱歉)。我似乎能够用整数做我想做的事,但是当我移到实数时会遇到问题。
我在这里解释了四个例子。
在SELECT语句中使用
问题:
。
备注:
1.Works (返回501行):
WITH RECURSIVE cte1 (n) AS
(
SELECT 0
UNION ALL
SELECT n + 1 FROM cte1 WHERE n < 500
)
SELECT * FROM cte1;
2.Works (返回91行:
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
):
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.
):
WITH RECURSIVE cte1 (n) AS
(
SELECT 0
UNION ALL
SELECT n + 0.1 FROM cte1 WHERE n < 9
)
SELECT * FROM cte1;
发布于 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。
https://stackoverflow.com/questions/68097675
复制相似问题