2014-11-01 80 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(*)))