当我将查询从默认浮点转换为小数点时,我的SQL语法中有一个错误 [英] I have an error in my SQL syntax when I convert the query from default floating-point to decimal point
本文介绍了当我将查询从默认浮点转换为小数点时,我的SQL语法中有一个错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
使用PHP和MariaDB我的知识相当不错。我100%运行MariaDB的知识是堆栈溢出和谷歌以及在线课程。我在谷歌上搜索了两个小时来解决这个问题,转换成小数点。发现了这一点。使用其中的1个"AS DECIMAL(8,5)"或"DECIMAL(8,5)"将其转换为DECIMAL,这些选项对我都不起作用。
表中的所有百分比列都是小数(8,5)。我在谷歌上读到你在运行SQL查询时默认的浮点数太多了。我的问题是我不知道如何转换为小数(8,5),我需要100%的准确率。
我有下面的表和下面的SQL查询。你能教我怎么把它转换成十进制吗?我已缩短表名以使其看起来更好。
表
1_Player | 2_Player | 3_Player | ID1_TA | id2_TA | id3_TA | Avg_TA |
---|---|---|---|---|---|---|
2 | 16 | 30 | 85.00000 | 100.00000 | 100.00000 | 100.00000 |
10 | 9 | 9 | 100.00000 | 100.00000 | 100.00000 | 100.00000 |
11 | 2 | 15 | 100.00000 | 85.00000 | 100.00000 | 100.00000 |
代码
UPDATE test
SET `avg_TA_percent` = (`id1_TA_percent` + `id2_TA_percent`+ `id3_TA_percent`) / 3
WHERE `id1_TA_player` = 2 || `id2_TA_player` = 2 || `id3_TA_player` = 2;
感谢您的帮助。
推荐答案
UPDATE test
SET avg_TA = (id1_TA + id2_TA + id3_TA) / 3
WHERE 2 IN (1_player, 2_player, 3_player);
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=47baf4517bf96643d6c2e16f5243fc42
或者您的意思是现在您的列是浮点型的,并且您想要更改数据类型并更新平均值?
ALTER TABLE test
MODIFY COLUMN id1_TA DECIMAL(8,5),
MODIFY COLUMN id2_TA DECIMAL(8,5),
MODIFY COLUMN id3_TA DECIMAL(8,5),
MODIFY COLUMN avg_TA DECIMAL(8,5);
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f001d75383c039a293055d58c2499550
还可以考虑将静态平均值列更改为已生成的列。在这种情况下,它将始终提供实际值,而无需重新计算:
ALTER TABLE test
MODIFY COLUMN id1_TA DECIMAL(8,5),
MODIFY COLUMN id2_TA DECIMAL(8,5),
MODIFY COLUMN id3_TA DECIMAL(8,5),
DROP COLUMN avg_TA,
ADD COLUMN avg_TA DECIMAL(8,5) AS ((id1_TA + id2_TA + id3_TA) / 3);
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=bf086aafc164ec82aaef717ee6d07707
PS。不可能达到100%的准确率。没有数据类型可以存储,例如,88。(3)这是88⅓-请参阅最后一把小提琴。
PPS。列名取自示例数据。
这篇关于当我将查询从默认浮点转换为小数点时,我的SQL语法中有一个错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文