SQLで調和平均(もどき)を計算したいのですが、下のようなSQL文で計算した結果が正しく出ないのです。
select ID, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from TABLE
(各項に1を足しているのは、ゼロ除算を避けるための苦肉の策です)
たとえば、A1=20, B1=10, C1=50 の場合、上記の結果が27.14と出ます。
(正しい計算結果は18.97のはずです)
ちなみに、上とまったく同じ式をExcelに入れて計算させると、ちゃんと正しい結果が出ます。
何が原因なのでしょうか?
No.1ベストアンサー
- 回答日時:
A1, B1, C1の型は何ですか。
こちらで試した結果から,A1の型がINT型になっているのではないでしょうか。
---- TEST ----
DECLARE @table1 TABLE ( A1 DECIMAL, B1 DECIMAL, C1 DECIMAL )
DECLARE @table2 TABLE ( A1 INT, B1 DECIMAL, C1 DECIMAL )
DECLARE @table3 TABLE ( A1 DECIMAL, B1 INT, C1 DECIMAL )
DECLARE @table4 TABLE ( A1 DECIMAL, B1 DECIMAL, C1 INT )
DECLARE @table5 TABLE ( A1 INT, B1 INT, C1 DECIMAL )
DECLARE @table6 TABLE ( A1 INT, B1 DECIMAL, C1 INT )
DECLARE @table7 TABLE ( A1 DECIMAL, B1 INT, C1 INT )
INSERT @table1 VALUES ( 20, 10, 50 )
INSERT @table2 VALUES ( 20, 10, 50 )
INSERT @table3 VALUES ( 20, 10, 50 )
INSERT @table4 VALUES ( 20, 10, 50 )
INSERT @table5 VALUES ( 20, 10, 50 )
INSERT @table6 VALUES ( 20, 10, 50 )
INSERT @table7 VALUES ( 20, 10, 50 )
select 1, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from @table1
UNION ALL
select 2, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from @table2
UNION ALL
select 3, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from @table3
UNION ALL
select 4, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from @table4
UNION ALL
select 5, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from @table5
UNION ALL
select 6, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from @table6
UNION ALL
select 7, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from @table7
(列名なし)HARMEAN
118.97101449275362318
227.14516129032258064
344.62500000000000000
421.65625000000000000
5153.00000000000000000
633.00000000000000000
763.00000000000000001
す、すごい…(+_+)
たしかに、変数の型というのは盲点でした。
型が違うことで計算結果が変わるというのは困りますね。
そういう場合はエラーが出るものだと勝手に思い込んでました。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) IF関数について教えてください 2 2022/05/10 13:31
- Excel(エクセル) Excel 数式を教えてください 2 2022/06/02 12:24
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) エクセルでIF関数中にIFERROR関数を使いたいのですが???? 5 2022/04/08 13:24
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Excel(エクセル) エクセルのSUM関数について 4 2023/04/18 10:37
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Excel(エクセル) EXCEL 計算結果の桁数をそろえたい。 5 2022/12/25 18:33
- Excel(エクセル) 至急です><Excelの関数を教えてください。 2 2022/03/22 17:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
count集計の結果が0の場合でも...
-
INSERT文でフィールドの1つだ...
-
JOINで1つのテーブルに空白があ...
-
SQLでフィールドの順番を変更し...
-
SQLServerでの切り上げ処理
-
MySQLで複数のSELECT文を1文に...
-
Unionの結果全体をOrder By し...
-
mysqlのsqlスクリプトエラーに...
-
'internal' のシステム メモリ...
-
SQLについて教えて下さい with(...
-
差し込み後、元データを変更し...
-
SQLで特定の項目の重複のみを排...
-
エクセルで最後の文字だけ置き...
-
SELECT 文 GROUP での1件目を...
-
外部参照してるキーを主キーに...
-
フィルターかけた後、重複を除...
-
for whichの使い方
-
SQLServerで文字列の末尾からあ...
-
SQL Left Join で重複を排除す...
-
SQLで列名を変数にできないでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INSERT文でフィールドの1つだ...
-
Unionの結果全体をOrder By し...
-
count集計の結果が0の場合でも...
-
SQLでフィールドの順番を変更し...
-
SQLについて教えて下さい with(...
-
グループ毎の最大値を持つデー...
-
SQL server改行コード
-
MySQLで複数のSELECT文を1文に...
-
'internal' のシステム メモリ...
-
SQLでの計算結果がおかしい
-
JOINで1つのテーブルに空白があ...
-
SQLServerでの切り上げ処理
-
SQL Server 2005 Express で CD...
-
「重複を間引いた数」をcountし...
-
自作関数の方がパフォーマンス...
-
DB2でのロック
-
mysqlのalter table中のロック...
-
複数テーブルからデータを取り...
-
差し込み後、元データを変更し...
-
SELECT 文 GROUP での1件目を...
おすすめ情報