【问题标题】:Calculate proportion (percent) [closed]计算比例(百分比)[关闭]
【发布时间】:2018-09-01 15:05:55
【问题描述】:

你能帮我计算一下比例吗

Table
user_id    attendance   Date
1            1           01.01.2018
2            Null        01.01.2018
3            1           02.01.2018
4            Null        03.01.2018
5            1           03.01.2018

如果用户有出席,则为 1,否则 - Null。

需要计算 01.01.18 - 02.01.18 期间的出勤率。 例如,2018 年 1 月 1 日有 1 个用户(50%),2018 年 1 月 2 日 - 100%。

坦克!

【问题讨论】:

  • 01.01.2018 是文字字符串,还是日期类型?
  • @Tim Biegeleisen,现在是日期
  • 重复问题,检查 cmets
  • 如果您的出勤人数可能不是零,请编辑您的问题,添加示例数据并向我们解释。

标签: mysql sql database join select


【解决方案1】:

你可以试试这个查询:

SELECT
    Date,
    100.0 * COUNT(attendance) / COUNT(*) AS perc_attendance
FROM yourTable
WHERE Date BETWEEN '2018-01-01' AND '2018-01-02'
GROUP BY
    Date;

这假设给定用户在给定日期最多只会出现一次。它还假定您的 Date 列是实际的日期列,而不仅仅是文本。

Demo

【讨论】:

  • 谢谢!但是我怎样才能从出席中只选择“1”?
  • Need to calculate percent of attendance ...是我看错了你的问题,还是你问错了问题?
  • 如果我将使用 '2' 和 '1' 而不是 '1' 和 Null - 我应该对我的查询进行哪些更改?
  • 实际上,您不需要更改任何内容,因为COUNT 将任何非 NULL 值计为 1,而将任何 NULL 值计为 0。因此,如果出现 1、2 或任何其他数字,我的相同答案应该会起作用。
【解决方案2】:

如果您尝试显示为新表,则可以使用此查询,但您必须创建一个:

SELECT Date,100.0 * COUNT(attendance) / COUNT(*) AS attendancepercent
FROM Table WHERE Date BETWEEN '2018-01-01' AND '2018-01-02'
GROUP BY Date;

【讨论】:

    【解决方案3】:
    select v.date1 , case when s.no_people is null and v.showup_people then 100
    when v.showup_people is null and s.no_people is not null then 0
    else (v.showup_people / (v.showup_people + s.no_people))*100  end outcome 
    
    from
    (select count(*) as no_people , date as date1
       from yourTable
       where attendance is null
       group by date) s
       right outer join
       (select count(*) as showup_people , date as date1
       from yourTable
       where attendance is not null
       group by date) v
    on(v.date1 = s.date1)
    

    将表名替换为表名..

    无论您有多少日期,这将始终有效。 这种情况是因为 null + mysql 中的一个数字给出了 null。 在 oracle sql 中,您可以只使用最后一个 else 语句。

    这是Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2021-01-10
      • 1970-01-01
      • 2012-04-29
      • 2020-09-23
      相关资源
      最近更新 更多