2015-01-30 8 views
0

Требование это добавить зарплату им работника с помощью SUM(), зарплата в этом формате 1,00,005.00 так, когда 1,00,005.00 + 3,00,005.00 это дает результат, 4 не фактический результат, это запрос ---->Агрегатная функция SUM() для денег

SELECT employee.name, SUM(department.salary) AS Salary 
FROM department 
LEFT JOIN employee ON department.employee_id = employee.id 
GROUP BY name 
+0

Какой тип поля зарплаты? – sectus

+0

Тип данных @sectus - 'varchar' – SoftwareDev

+1

Числа не содержат в них запятых ..... если вы сохраняете это в varchar с запятыми, тогда прекратите делать это ..... преобразуйте свое поле в числовое значение и сохранить значение без этих запятых –

ответ

0

Попробуйте удалить все «,» в зарплату, а затем использовать сумму(). Вы можете использовать MySQL replace функцию

SELECT employee.name, SUM(replace(department.salary,",","")) AS 
Salary FROM department LEFT JOIN employee ON department.employee_id 
= employee.id GROUP BY name 
0

Основной вопрос, является ли ваша валюта является десятичным типа или нет. Ваш формат «1,00,005.00» с группами из двух и три цифры заставляет меня задуматься.

Если это так, если «1,99,997» + «0,00,003» равно «2,00,000», то вы можете использовать ответ Hắc Huyền Minh и сразу же преобразовать его в десятичный эквивалент.

Прежде чем это сделать, я проверил бы приемочный тест в базе данных, чтобы убедиться, что все значения действительно в ожидаемой форме. В противном случае вы можете ввести ошибку в работе. VARCHAR тип не имеет никакой проверки, и у кого-то может быть зарплата «1,0X, 000,15», которая будет считаться эквивалентной десять после конвертации.

Если ваша валюта не десятичного типа - например, если «1,05,03» означает «one pound five shilling three pennies» - тогда «1,05,03» + «1,19,09» является не «2,24,12», а скорее «3,05,00» - поскольку двенадцать пенни, а не десять, делают шиллинг, и для изготовления фунта требуется двадцать шиллингов.

В этом случае вы либо конвертируете его в десятичный с помощью взвешивания, либо выбираете все строки и делаете сумму в коде вместо MySQL. Было бы также возможно реализовать UDF для выполнения либо суммы, либо преобразования в десятичную.

Для взвешивания вы считаете, что если один фунт состоит из 20 шиллингов, то каждый шиллинг составляет 1/20 одного фунта, и он равен 0,05; поэтому «1,05» становится равным 1 + 5 * 0,05 = 1,25. За гроши двенадцать пенни составляют один шиллинг, который составляет 0,05 фунта, поэтому один пенни составляет 0,05/12 = 0,00416666 ... (и там вы видите трудность. Вам понадобится больший числовой тип, чтобы предотвратить числовые ошибки от ползания).

+0

Прочитайте [* Индийская система нумерации *] (http://en.wikipedia.org/wiki/Indian_Numbering_System) –

+0

Я вижу. Это хорошая новость для ответа OP - @ HắcHuyềnMinh. Только обязательно примите приемочные тесты на всякий случай. (Кроме того, мне кажется, было бы более практично хранить ценности как типы валют и только форматировать их на дисплее). – LSerni

Смежные вопросы