2015-04-02 92 views
0

這是我當前的查詢:MySQL的查詢給予不準確的結果

select baseball , const.cnt/count(*) as my_percent 
from full_db3 inner join 
(select count(*) as cnt from full_db3 where gender = 'f') const 
group by baseball 
order by my_percent desc limit 10; 

這會產生不準確的結果。 baseball的可能值爲TRUE和FALSE,這些值出現在我的結果的baseball列中。但是,my_percent的值全部關閉。差遠了。

如果我運行這個查詢(不同的GROUP BY),我在my_percent中得到了正確的值FALSE,但TRUE不在結果中。

select baseball , const.cnt/count(*) as my_percent 
from full_db3 inner join 
(select count(*) as cnt from full_db3 where gender = 'f') const 
group by const.cnt 
order by my_percent desc limit 10; 

我在這裏錯過了什麼?

回答

1

如何更簡單的東西:

select baseball , 
     (sum(case when gender = 'f' then 1 else 0 end)/count(*)) * 100 as pct 
FROM full_db3 
group by baseball; 

這個查詢給女性是播放器/非玩家的百分比;

select gender, 
    (sum(baseball)/count(baseball)) * 100 as players, 
    (1 - (sum(baseball)/count(baseball))) * 100 as non_players 
    from full_db3 
    where gender = 'f' 
    ; 

,最後一個,具有真/在行假,如最終確定的要求:

select baseball, 
    (count(*)/
     (select count(gender) from full_db3 where gender = 'f')) * 100 as pct 
from full_db3 
where gender = 'f' 
group by baseball; 

小提琴:http://sqlfiddle.com/#!9/15866/6

+0

謝謝。這運行沒有錯誤,但結果是錯誤的。我在'棒球'專欄中回到了TRUE和FALSE,這是正確的,但'pct'中的值都是錯誤的。它們應該加起來爲100,但總和爲130.7。這兩個值都不是正確的。 – jonmrich 2015-04-02 00:31:40

+0

如果我刪除'group by baseball',我只能得到FALSE的正確值。查詢結果中不顯示TRUE。 – jonmrich 2015-04-02 00:32:44

+0

你需要解釋你想要的值。你得到的答案是女性所有(棒球=真)的百分比,以及女性所有(棒球=假)的百分比。你只是想要女性做百分比還是沒有棒球=真? – 2015-04-02 00:33:45

0

看起來你試圖展示打棒球的人的百分比。

你不想

SELECT baseball, gender, (100.0 * COUNT(*)/const.cnt) AS my_percent 
    FROM full_db3 
    JOIN (SELECT COUNT(*) AS cnt FROM full_db3) CONST 
GROUP BY baseball, gender 

您可能還需要。

SELECT baseball, gender, (100.0 * COUNT(*)/const.cnt) AS my_percent 
    FROM full_db3 
    JOIN (
    SELECT COUNT(*) AS cnt, gender 
     FROM full_db3 
     GROUP BY gender 
     ) CONST ON full_db3.gender = CONST.gender 
GROUP BY baseball, gender 

如果你想知道'm'和'f'性別百分比分別具有棒球屬性。

100.0 *將您的分數成比例

LIMIT 10使得在這種情況下,沒有任何意義,因爲你總查詢不包含十個不同的類別。

+0

您的查詢給了我「未知列' '字段列表'中的'const.cnt',第二個字段給我列「字段列表中的列'性別'是不明確的」。我試圖指定(例如)性別(例如,女性)並找回女性打棒球的比例(true v false)。 – jonmrich 2015-04-02 00:24:13