在mysql中以百分比形式输出相同的列值

Posted

技术标签:

【中文标题】在mysql中以百分比形式输出相同的列值【英文标题】:same column value output as percentage in mysql 【发布时间】:2018-08-19 17:11:44 【问题描述】:

样本表:

此表有员工 1 的 5 个条目。1 表示在场,2 表示缺席,3 表示迟到。我想要以下输出。

样本输出:

【问题讨论】:

【参考方案1】:

这是一个非常简单的方法:

select employee_id,
       avg( present_id = 1 ) as present_ratio,
       avg( present_id = 2 ) as absent_ratio,
       avg( present_id = 3 ) as late_ratio
from t
group by employee_id;

这会产生一个介于 0 和 1 之间的数值。如果你真的想要一个百分比,你可以乘以 100;我发现这个比例更容易理解。

这使用 mysql 扩展,其中布尔表达式的结果被视为数字上下文中的数字,0 表示假,1 表示真。更详细的方法使用 ANSI 标准功能:

avg(case when present_id = 1 then 1.0 else 0 end) as present_ratio

【讨论】:

它不能满足我的要求。 present_ratio+absent_ratio+late_ratio 应该是一百。但它给出了不同的结果。这就是我给出示例输出的原因。这里只是我只给了一个员工的条目。会有很多员工。 @hmamun 。 . .它加起来是“1”,而不是“100”。如果你想要 100,然后乘以 100,正如我在答案中解释的那样。正如您的问题所暗示的那样,此查询是针对每个员工的(您的结果集有一个员工 ID 列)。

以上是关于在mysql中以百分比形式输出相同的列值的主要内容,如果未能解决你的问题,请参考以下文章

如果相同的列值在多行中重复,则 UPDATE - SQL / MYSQL

准确计算Linux中以百分比给出的CPU使用率?

如何使用列值范围应用 NTILE(4)?

sql查询结果如何以百分比形式输出?

在单个查询中以总和的百分比汇总表

使用 Python pandas 根据列值生成每个组的百分比