2017-06-22 6 views
2

私はSQL(SQLiteStudioを使用しています)を初めて使用しており、いくつかの集約関数を使用しようとしています。私は個人の質量未満575である私のデータのサブセットの割合を見つけたいが、クエリはゼロを返し続ける:countを指定した2つのステートメントの除算は、ゼロを返します。

SELECT A/B*100 
FROM (
    SELECT COUNT(*) AS A 
    FROM Male 
    WHERE mass < 575 AND location = 'Hawaii') 
     ,(
    SELECT COUNT(*) AS B 
    FROM Male 
    WHERE location = 'Hawaii') 
; 

私は問題がで変数を宣言するために持っていた他の質問を読みました小数点としての質問ですが、私はCOUNT()関数の制約をどのように変更するのか分かりません。乗算A * Bはうまく動作します。

答えて

2

あなたは1つの選択ステートメントにクエリを簡素化し、0.0は簡単だったトリック

SELECT 
    (SUM(CASE WHEN mass < 575 THEN 1 ELSE 0 END) * 100.0)/COUNT(*) 
FROM Male 
WHERE location = 'Hawaii' 
+0

これはクエリを単純化しますが、100を返しますか? –

+0

AとBの結果を別々の文として更新できますか?彼らはどのような価値を持っていますか? –

+0

Aは10、Bは34です。正しい戻り値は29. –

1

SELECT A * 100/B 

試しまたは中間結果があるため、整数除算の0であろう。

+0

を行う必要が100.0との乗算によって鋳造を強制することができます!すべての場所でこれをやりたいのですが、 "あいまいな列名"エラーを回避する方法がわかりません: '場所を選択、A * 100/B FROM( SELECT *、COUNT(* )男性M1 M1.location BY質量<575 GROUP) 、( SELECT *、m2.location BY男性M2 群からB AS COUNT(*)) M1.location = M2 FROM AS 。位置 GROUP BY M1.位置 ; 戻り値:あいまいな列名:場所 –

+0

SELECT M1.location – mikep

+0

は、この修正作業をしましたか? M1.location? – mikep

関連する問題