如何在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;
玩得开心-
MarcoGordon的回答暗示了一个数据库平台,它隐式地将布尔值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;
玩得开心-
马可