如何在mysql中获取一定比例的行

时间:2017-01-07 13:17:08

标签: mysql sql

我有一张这样的表

user    result
john    +
mike    -
john    -
rita    +

我想得到的百分比 - 按用户分组。因此,对于我的示例,结果必须是:

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

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

2 个答案:

答案 0 :(得分:2)

只需使用条件聚合。这是一个简单的方法:

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

这将使结果为0到1之间的值,然后可以根据需要进行格式化。

答案 1 :(得分:0)

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;

快乐的比赛 -