У меня сложилось впечатление, что вы хотите:
SELECT
a.ID,
ROUND(sum(a.grade)/min(b.quantity) * min(b.percentage)/100, 2) as promedio
FROM grade a INNER JOIN distri_grade b ON b.grade_code = a.grade_code
group by a.ID
Мне кажется, от того, что вы пытаетесь, что все значения из distri_grade
(ака b
) фиксируются для всех строк, прикрепленных к одному ID
. Когда они являются константами, оно истинно алгебраически, что sum(a.grade/QUANTITY * PERCENTAGE) = sum(a.grade)/QUANTITY * PERCENTAGE
из-за дистрибутивного свойства умножения по сложения. В SQL способ вытащить эти «постоянные» значения над группой - использовать фиктивную агрегацию, такую как min()
или max()
. И хотя вы можете просто обернуть суммирование вокруг всего выражения, этот метод, вероятно, имеет преимущество (в зависимости от используемых типов данных) в числовой точности, делая деление и умножение только один раз. Обратите также внимание на то, чтобы быть осторожным с целым делением, поскольку я предполагаю, что ваши три столбца потенциально являются целыми числами.
Удалить 'a.grade_code' из предложений' SELECT', 'GROUP BY' и' ORDER BY'. –
Возможно, я не понимаю ваш вопрос. В вашем запросе не будет всего 2 столбца. Возможно, вы могли бы также включить образцы данных? – sgeddes