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

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

deroga Ученик (102), открыт 3 недели назад
учусь в техникуме, предмет Базы данных, практическое задание выполняем по инструкции препода и потом сдаем с опросом что, как и почему работает. возникла проблема, пишу код хранимой процедуры по инструкции, потом пишу запрос для проверки этой же процедуры. препод просит, чтобы выводился у студентов средний балл ниже 3.5, но выходит 3.666666666666667 у двух человек и у других двух все нормально, меньше 3.5 (т.е. там оценки 5/3/3 в случае, когда ср. балл 3.66…, сам средний балл не посчитан, приходится на калькуляторе сверять) и спрашивает меня «или сделай так, чтобы было меньше 3.5, или объясни, почему выводит такое число?»
почему выходит больше 3.5? как это объяснить или исправить?
1 ответ
Инспектор Жопидý Просветленный (43551) 3 недели назад
Проблема в том, что 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Ученик (102) 3 недели назад
заранее спасибо, завтра на паре попробую
Похожие вопросы