如何在mysql中获得一定百分比的行

如何在mysql中获得一定百分比的行,mysql,sql,Mysql,Sql,我有一张这样的桌子 user result john + mike - john - rita + 我想获得按用户分组的百分比。因此,对于我的示例,结果必须是: user %min john 50% mike 100% rita 0% 在mysql中有可能创建这样的查询吗?只需使用条件聚合即可。下面是一个简单的方法: select user, avg(result = '-') as percent_min from t group by

我有一张这样的桌子

user    result
john    +
mike    -
john    -
rita    +
我想获得按用户分组的百分比。因此,对于我的示例,结果必须是:

user    %min
john    50%
mike    100%
rita    0%

在mysql中有可能创建这样的查询吗?

只需使用条件聚合即可。下面是一个简单的方法:

select user, avg(result = '-') as percent_min
from t
group by user;

这将给出一个介于0和1之间的值,然后可以根据需要格式化。

只需使用条件聚合即可。下面是一个简单的方法:

select user, avg(result = '-') as percent_min
from t
group by user;

这将给出一个介于0和1之间的值,然后可以按照您的要求进行格式化。

Gordon的回答暗示了一个数据库平台,它隐式地将布尔值TRUE转换为1,将布尔值FALSE转换为0。本标准未规定的。如果遇到类似“函数avg(布尔值)不存在”的错误,请尝试使用CASE表达式:

    WITH tb (usr,result) AS (
                  SELECT 'john','+'
        UNION ALL SELECT 'mike','-'
        UNION ALL SELECT 'john','-'
        UNION ALL SELECT 'rita','+'
    )
    SELECT 
      usr
    , AVG(CASE result WHEN '-' THEN 100 ELSE 0 END) AS percent_min
    FROM tb
    GROUP BY usr
    ORDER BY usr;
玩得开心-


Marco

Gordon的回答暗示了一个数据库平台,它隐式地将布尔值TRUE转换为1,将布尔值FALSE转换为0。本标准未规定的。如果遇到类似“函数avg(布尔值)不存在”的错误,请尝试使用CASE表达式:

    WITH tb (usr,result) AS (
                  SELECT 'john','+'
        UNION ALL SELECT 'mike','-'
        UNION ALL SELECT 'john','-'
        UNION ALL SELECT 'rita','+'
    )
    SELECT 
      usr
    , AVG(CASE result WHEN '-' THEN 100 ELSE 0 END) AS percent_min
    FROM tb
    GROUP BY usr
    ORDER BY usr;
玩得开心-

马可