2017-06-22 30 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