2015-04-02 87 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