我有一个表格,用于在VARCHAR
列中存储数值,此列存储以六位数字计算的值。含义:
3.5 = 3 + 5/6
9.4 = 3.4 + 5.6
我需要获取这些行中值的总和。我知道我需要根据id分隔它们,然后添加特定的ID' base-sixe数字在一起,但我不知道从哪里开始。有没有简单的方法呢?
答案 0 :(得分:1)
您可以使用以下代码将这些数字转换为普通数字:
SUBSTRING_INDEX(column, '.', 1) + IF(LOCATE(column, '.'), SUBSTRING_INDEX(column, '.', -1)/6, 0)
然后,您可以在SUM()
中使用此表达式添加表格中的所有列,也可以将其与+
一起使用,以便相互添加不同的列。 E.g。
SELECT SUM(SUBSTRING_INDEX(column, '.', 1) + IF(LOCATE(column, '.'), SUBSTRING_INDEX(column, '.', -1)/6, 0)) AS total
FROM yourTable
如果您还需要将总和转换回基础6分数表示,您可以使用:
CONCAT(FLOOR(total), '.', ROUND(MOD(total, 1) * 6)
因此完整查询可能如下所示:
SELECT CONCAT(FLOOR(total), '.', ROUND(MOD(total, 1) * 6) AS total
FROM (SELECT SUM(SUBSTRING_INDEX(column, '.', 1) +
IF(LOCATE(column, '.'), SUBSTRING_INDEX(column, '.', -1)/6, 0)) AS total
FROM yourTable) as subquery
答案 1 :(得分:0)
您可以向表中添加一个新的虚拟列,每次更改时,MySQL都会存储规范化的值。所以你可以总结这个专栏。
仅更改列'col'
的Tablename和名称ALTER TABLE mytable
ADD COLUMN norm float AS (FLOOR(col) + MOD(col, 1) / 0.6 ) PERSISTENT;
如果需要,您还可以在新字段上添加索引。
请告诉我它是否适合您