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

样本表:

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

样本输出:

【问题讨论】:

    标签: mysql sql aggregation


    【解决方案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 列)。
    猜你喜欢
    • 2018-06-18
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多