使用PHP和MariaDB,我的知识相当不错。我在运行100%MariaDB方面的知识是堆栈溢出、谷歌和在线课程。我在谷歌上搜索了如何在2个小时内解决转换为小数点的问题。发现这一点时,请使用其中2个">AS DECIMAL(8,5("或">DECIMAL"中的1个来转换为十进制,这些对我来说都不起作用
表中所有的百分比列都是十进制的(8,5(。我在谷歌上读到,当你运行SQL查询时,默认值太浮点。我的问题是我不知道如何转换成十进制(8,5(,我需要100%的准确性。
下面是表,下面是SQL查询。你能告诉我如何把它转换成十进制吗。
我缩短了表名,使它看起来更好。
表
1-player | 2-player | id1_TA | id2_TAid3_TA>平均_TA|||
---|---|---|---|---|---|
2 | 16 | 30 | 85.000001.00000001000000 | ||
10 | 9 | 1000000 | <1000000>1000000 | ||
11 | 2 | 15 | 1000000 | >85.00000 | <1000000>100000 |
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=f001d7583c039a293055d58c2499550
还可以考虑将静态平均值列更改为生成平均值列。在这种情况下,它将始终提供实际值,而无需重新计算:
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=bf086afc164ec82aaef717ee6d07707
PS。要达到100%的准确度是不可能的。没有一种数据类型可以存储,例如88。(3(即88⅓ -看最后一把小提琴。
PPS。列名取自示例数据。