Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помощь с заданием, SQL

deroga Ученик (126), на голосовании 5 месяцев назад
учусь в техникуме, предмет Базы данных, практическое задание выполняем по инструкции препода и потом сдаем с опросом что, как и почему работает. возникла проблема, пишу код хранимой процедуры по инструкции, потом пишу запрос для проверки этой же процедуры. препод просит, чтобы выводился у студентов средний балл ниже 3.5, но выходит 3.666666666666667 у двух человек и у других двух все нормально, меньше 3.5 (т.е. там оценки 5/3/3 в случае, когда ср. балл 3.66…, сам средний балл не посчитан, приходится на калькуляторе сверять) и спрашивает меня «или сделай так, чтобы было меньше 3.5, или объясни, почему выводит такое число?»
почему выходит больше 3.5? как это объяснить или исправить?
Голосование за лучший ответ
Инспектор Жопидý Оракул (86401) 6 месяцев назад
Проблема в том, что SQL Server по умолчанию использует целочисленное деление, когда все операнды в выражении являются целыми числами.
Чтобы исправить это и получить более точный средний балл, вам нужно привести один из операндов к типу данных с плавающей точкой. В вашем случае, проще всего привести сумму оценок к типу REAL :
WHERE (([Оценка первого экзамена] + [Оценка второго экзамена] + [Оценка третьего экзамена]) / 3.0) < @Grade

Объяснение:
1. Деление на 3.0: Деление на число с плавающей точкой (3.0) заставит SQL Server выполнить деление с плавающей точкой, даже если остальные операнды - целые числа.
2. Точность: Это обеспечит более точный расчет среднего балла, включая десятичные знаки.
Дополнительные советы:
• Тип данных @Grade : Убедитесь, что переменная @Grade объявлена как тип данных, поддерживающий десятичные значения (например, REAL, FLOAT или DECIMAL).
• Округление: Если вам нужно отобразить средний балл с определенной точностью, используйте функцию ROUND(). Например, ROUND((сумма / 3.0), 2) округляет результат до двух знаков после запятой.
Объяснение преподавателю:
"При делении суммы оценок на 3 SQL Server использовал целочисленное деление, так как все операнды были целыми числами. Это привело к потере точности и округлению среднего балла. Я исправил это, приведя сумму оценок к типу данных REAL, чтобы SQL Server выполнял деление с плавающей точкой и выдавал более точный результат."
derogaУченик (126) 6 месяцев назад
заранее спасибо, завтра на паре попробую
Похожие вопросы