2014-11-13 4 views
0

Выполняю операцию для вычисления процента на основе 2 значений.Получение неправильного значения из SQL Math Operation?

У меня есть отдельная таблица, которая отслеживает общую стоимость в сравнении с месяцами и годами.

Имя таблицы - donation_tracker

enter image description here

Я сравниваю всех месяцев через текущий и предыдущий год, то выполняя вычисления, такие как:

Текущее значение (месяц- январь, год- 2014, CityID-1)/Предыдущее значение (месяц-январь, год-2013, CityID-1) = значение подразделения * 100 = новое процентное значение.

Некоторые математические операции являются правильными, но некоторые из них неправильно, например, изображение ниже показывает 140, когда оно должно быть 130.

enter image description here

Значения Я quering следующим образом: enter image description here

в столбце donation_amount устанавливается как

Тип = Десятичный

Длина = 10,2.

Сумма должна быть 130 ...

SQL code-

SELECT city_markers.City_ID, city_markers.City_Name, city_markers.City_Lng, city_markers.City_Lat, SUM(d2.Donation_Amount) , d1.Month, d1.Year, round((
D2.Donation_amount/D1.Donation_amount 
) *100, 2) 
FROM `city_markers` 
INNER JOIN donation_tracker d1 ON city_markers.City_ID = d1.City_ID 
INNER JOIN donation_tracker D2 ON d1.month = D2.month 
AND d1.month = 'January' 
AND d2.month = 'January' 
AND d2.year = '2014' 
AND D1.year = D2.year -1 
AND D1.Location_ID = D2.Location_ID 
GROUP BY city_markers.City_ID 

Спасибо.

ответ

1

Вы не суммируются суммы здесь:

round((D2.Donation_amount/D1.Donation_amount) *100, 2) 

Таким образом, результат вычисляется по значениям каждого первого ряда:

round((70/50) *100, 2) ==> 140 

Использование суммы(), чтобы получить желаемый результат:

round((sum(D2.Donation_amount)/sum(D1.Donation_amount)) *100, 2) 
+0

Спасибо, что действительно помог мне. –

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