2017-06-22 106 views
2

我是SQL新手(使用SQLiteStudio),並且正在嘗試使用某些聚合函數。我想找到我的數據的一個子集,其中個人的質量小於575的比例,但查詢一直返回零:計數返回爲零的兩個語句的分區

其中問題是不得不聲明變量在
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

你完全可以簡化您的查詢到一個select語句和乘法迫使鑄造100.0,其中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

這很容易!現在我想爲所有位置都這樣做,但我不知道如何解決「模棱兩可的列名」錯誤: 'SELECT location,A * 100/B FROM( SELECT *,COUNT(* ),爲 從雄性M1 WHERE質量<575 GROUP BY M1.location) ,( SELECT *,COUNT(*)AS乙 從雄性M2 GROUP BY m2.location) WHERE M1.location = M2 .location GROUP BY M1.location ;' 返回:模棱兩可的列名:位置 –

+0

SELECT M1.location – mikep

+0

此修補程序是否有效? M1.location? – mikep