【问题标题】:Average calculation ignoring some data忽略一些数据的平均计算
【发布时间】:2022-01-21 19:22:46
【问题描述】:

我想根据这些数据计算平均值。我不想将完成少于或等于 3 个订单的普通用户包括在内。

我使用这段代码来计算每个用户的订单总数:

SELECT DISTINCT `User`, COUNT(`User`) FROM `DB` GROUP BY`User`;

我得到结果:用户 1 = 9,用户 2 = 3,用户 3 = 8。 如何计算此数据的平均值,以便不考虑用户,平均值为 8.5

date                | User  | Type
-----------------------------------
17-01-2022 00:00:00 | User1 | A
17-01-2022 00:00:00 | User1 | A
17-01-2022 00:00:00 | User1 | A
17-01-2022 00:00:00 | User2 | A
18-01-2022 00:00:00 | User3 | B
18-01-2022 00:00:00 | User3 | B
18-01-2022 00:00:00 | User3 | B
19-01-2022 00:00:00 | User1 | B
19-01-2022 00:00:00 | User2 | B
19-01-2022 00:00:00 | User2 | C
19-01-2022 00:00:00 | User3 | C
20-01-2022 00:00:00 | User3 | C
20-01-2022 00:00:00 | User3 | C
20-01-2022 00:00:00 | User3 | C
20-01-2022 00:00:00 | User1 | C
21-01-2022 00:00:00 | User1 | A
21-01-2022 00:00:00 | User1 | A
21-01-2022 00:00:00 | User3 | A
21-01-2022 00:00:00 | User1 | A
21-01-2022 00:00:00 | User1 | A

【问题讨论】:

  • 使用GROUP BY时不需要DISTINCT,因为分组可以防止重复。
  • 什么的平均值?
  • @Sebi2020 每个用户的数据库记录平均值

标签: mysql group-by count average having


【解决方案1】:

使用HAVING子句排除订单少于或等于3个的用户,然后计算平均值:

SELECT AVG(counter) AS avg_counter
FROM (
  SELECT `User`, COUNT(`User`) AS counter
  FROM `DB` 
  GROUP BY`User`
  HAVING counter > 3
) t;

【讨论】:

  • 用户列在子选择中没有用。它不在根查询中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2017-12-28
  • 2016-02-28
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
相关资源
最近更新 更多