У меня есть таблица, которая хранит числовое значение в VARCHAR
столбец, этот столбец хранит значения, рассчитанные в шестой математике. Имея в виду:
3,5 = 3 + 5/6
9,4 = 3,4 + 5,6
Мне нужно получить сумму значений в этих строках. Я знаю, что мне нужно разделить их на основе идентификатора, а затем сложить вместе числа с базовыми шестью конкретных идентификаторов, однако я не знаю, с чего начать. Есть ли простой способ сделать это?
Вы можете преобразовать эти числа в обычные числа с:
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
Вы можете добавить новый виртуальный столбец в таблицу, где MySQL хранит нормализованное значение при каждом его изменении. Таким образом, вы можете суммировать эту колонку.
Измените только имя таблицы и имя столбца ‘col’
ALTER TABLE mytable
ADD COLUMN norm float AS (FLOOR(col) + MOD(col, 1) / 0.6 ) PERSISTENT;
Вы также можете поместить индекс в новое поле, если хотите.
Пожалуйста, дайте мне знать, если это работает для вас