我有一张这样的表
user result
john +
mike -
john -
rita +
我想得到的百分比 - 按用户分组。因此,对于我的示例,结果必须是:
user %min
john 50%
mike 100%
rita 0%
在mysql中可以创建这样的查询吗?
答案 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;
快乐的比赛 -
马