当我将查询从默认浮点数转换为小数点时,我的 SQL 语法出现错误
I have an error in my SQL syntax when I convert the query from default floating-point to decimal point
使用 PHP 和 MariaDB 我的知识相当丰富。我在 运行ning 100% MariaDB 方面的知识是堆栈溢出和 Google 以及在线课程。我在谷歌上搜索了 2 小时如何解决这个转换为小数点的问题。发现使用这 2 个“AS DECIMAL(8,5)”或“DECIMAL(8,5)”中的 1 个来转换为十进制none 这些对我有用。
table中的所有百分比列均为小数(8,5)。当您 运行 时,我在 Google 上读到一个 SQL 查询默认值太浮点。我的问题是我不知道如何转换为 decimal(8,5),我需要 100% 的准确性。
下面是 table 查询,下面是 SQL 查询。你能告诉我如何把它转换成十进制吗?
我缩短了 table 个名字以使其看起来更好。
Table
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
或者您的意思是现在您的列是 FLOAT 并且您想更改数据类型并更新平均值?
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% 的准确率。 None 数据类型可以存储,例如,88.(3) 即 88⅓ - 请参阅最后一个 fiddle.
PPS。列名取自示例数据。
使用 PHP 和 MariaDB 我的知识相当丰富。我在 运行ning 100% MariaDB 方面的知识是堆栈溢出和 Google 以及在线课程。我在谷歌上搜索了 2 小时如何解决这个转换为小数点的问题。发现使用这 2 个“AS DECIMAL(8,5)”或“DECIMAL(8,5)”中的 1 个来转换为十进制none 这些对我有用。
table中的所有百分比列均为小数(8,5)。当您 运行 时,我在 Google 上读到一个 SQL 查询默认值太浮点。我的问题是我不知道如何转换为 decimal(8,5),我需要 100% 的准确性。
下面是 table 查询,下面是 SQL 查询。你能告诉我如何把它转换成十进制吗?
我缩短了 table 个名字以使其看起来更好。
Table
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
或者您的意思是现在您的列是 FLOAT 并且您想更改数据类型并更新平均值?
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% 的准确率。 None 数据类型可以存储,例如,88.(3) 即 88⅓ - 请参阅最后一个 fiddle.
PPS。列名取自示例数据。