Подсчитайте числовой столбец Varchar, хранящийся в шестой базе

У меня есть таблица, которая хранит числовое значение в VARCHAR столбец, этот столбец хранит значения, рассчитанные в шестой математике. Имея в виду:

3,5 = 3 + 5/6

9,4 = 3,4 + 5,6

Мне нужно получить сумму значений в этих строках. Я знаю, что мне нужно разделить их на основе идентификатора, а затем сложить вместе числа с базовыми шестью конкретных идентификаторов, однако я не знаю, с чего начать. Есть ли простой способ сделать это?

-1

Решение

Вы можете преобразовать эти числа в обычные числа с:

SUBSTRING_INDEX(column, '.', 1) + IF(LOCATE(column, '.'), SUBSTRING_INDEX(column, '.', -1)/6, 0)

Затем вы можете использовать это выражение в SUM() добавить все столбцы в таблице, или вы можете использовать его с + добавлять разные столбцы друг к другу. Например.

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

Другие решения

Вы можете добавить новый виртуальный столбец в таблицу, где MySQL хранит нормализованное значение при каждом его изменении. Таким образом, вы можете суммировать эту колонку.

Измените только имя таблицы и имя столбца ‘col’

ALTER TABLE mytable
ADD COLUMN norm float AS (FLOOR(col) + MOD(col, 1) / 0.6 ) PERSISTENT;

Вы также можете поместить индекс в новое поле, если хотите.

Пожалуйста, дайте мне знать, если это работает для вас

0

По вопросам рекламы [email protected]