2014-11-01 82 views
0

我有这样的SQL查询,到目前为止,用于查找基于各种“性”SQL查询和计数

select (
     (select count(*) from hw where DISCHARGE_STATUS = 'B') 
     /
     count(*) 
     * 100 
     ) as Percentage 
from hw 

比方说我的表是

SEX  DISCHARGE STATUS 
1    A 
1    B 
2    B 
2    B 
2    B 

放电B的百分比的百分比将是80%/ 100%总计数:所有性别

现在让我们说我需要找到百分比相同的方式,但分类与性类型1和2 1将20/100%总计数:对于性别Ť YPE 1和DISCHARGE TYPE B 2将是60/100%总计数:对于性别类型2和排出类型B

我试图在查询结尾添加GROUP BY SEX,但这并没有帮助,什么可以我做?

感谢提前:)

回答

1

而不通过查询汉王两次,你可以这样做一个合格并通过SUM获得子计数:

select 
    count(*) as count_total, 
    sum(discharge_status = 'B') as count_b, 
    sum(sex = 1) as count_sex1, 
    sum(discharge_status = 'B' AND sex = 1) as count_b_sex1 
from hw; 

(一种导致TRUE为1的表达,一个是在MySQL导致FALSE为0。因此,您每个匹配记录的SUM 1。换句话说:你算)

然后做任何你想要的数学上:

select 
    sum(discharge_status = 'B' AND sex = 1)/
    sum(discharge_status = 'B') * 100 as percent_sex1_in_b 
from hw; 

(在这个简单的例子,你只使用状态B计时,你可以移动discharge_status = 'B'到的WHERE子句当然。)

0

如果你想SEX和DISCHARGE_STATUS的每个组合的百分比,然后这个查询会工作。

SELECT SEX, DISCHARGE_STATUS, 
     COUNT(*)/(SELECT COUNT(*) FROM hw WHERE SEX = hw.SEX AND DISCHARGE_STATUS = hw.DISCHARGE_STATUS) pct 

FROM hw 

GROUP BY SEX, DISCHARGE_STATUS 

SQLFiddle

0

可以尝试这对性1型

((选择从HW总和(性别),其中性别= 1)/(选择从HW总和(性别)))

*

((SELECT COUNT(从HW DISCHARGE_STATUS),其中(DISCHARGE_STATUS)= B)从HW/SELECT COUNT(*)))