2

MySQLROUND()関数に問題があります。ここにあります:

私がこれを行うとき:

SELECT ROUND(7/2) as avg FROM bla blah

平均は 4

私がこれを行うとき:

 SELECT ROUND(SUM(marks)/COUNT(marks)) as avg

平均は 3 注:SUM(marks)それだけで 7COUNT(marks)が得られ、2 が得られます。これは、私が理解している限り ROUND(SUM(marks)/COUNT(marks))ROUND(7/2)

何が問題ですか?

4

3 に答える 3

1

どうやら MySQL は として解釈7/27.0/2.0、整数ではなく浮動小数点数を使用して計算を行い、3.5ではなく結果を返し3ます。

結果のデータ型を使用sumすると、フィールドと同じになるため、整数を使用して計算を行うことになります。つまり7/2、結果を返し3ます。

double計算を行う前に値をキャストします。

SELECT ROUND(cast(SUM(marks) as double)/cast(COUNT(marks) as double)) as avg
于 2012-05-30T07:52:08.373 に答える
0

使用できます(常に最も近い整数に丸められることを除いてCEILING同じです)ROUND

SELECT CEILING(SUM(marks)/COUNT(marks)) as avg

質問で指定された要件に対して必要な結果が得られるはずです。

于 2012-05-30T07:56:40.073 に答える
0

MySql の数学演算はfloatの結果を作成します。

float を使用する場合、7/2 は 3.4999999999999 として表すことができます。3 になる丸め。

于 2012-05-30T07:46:52.787 に答える