【问题标题】:MySQL Avg Count With Where and Group ByMySQL Avg Count With Where 和 Group By
【发布时间】:2018-07-24 17:07:36
【问题描述】:

此表保存销售人员拨打的电话记录:

id | clientid | salespersonid | call_duration | date | last_update
1  | c2345    | sp34          | 05:00         | yyyy | yyyy
2  | c2345    | sp34          | 05:00         | yyyy | yyyy
3  | c2345    | sp35          | 05:00         | yyyy | yyyy
4  | c2345    | sp36          | 05:00         | yyyy | yyyy
5  | c2361    | sp36          | 05:00         | yyyy | yyyy
6  | c2361    | sp36          | 05:00         | yyyy | yyyy

有了这张表,我想计算两件事:

  1. 每个客户的平均通话次数:每个客户的平均通话次数。

    在这种情况下,数字应该返回:3

  2. 每位销售员的平均通话次数:每位销售员的平均通话次数。

    在这种情况下,数字应该返回:2

计算平均值几乎是基本的数学知识。这只是计算/添加和除以行数的问题。但是在 MySQL 中,如果没有为 WHERE CLAUSE 提供特定值,我无法弄清楚我将如何做到这一点?我的意思是,如果我想计算销售人员 34 的平均值,我会指定 WHERE salespersonid=sp34。如果我想计算客户 2345 的呼叫平均值,我会做 WHERE clientid=c2345 但在这里我想计算平均值。

【问题讨论】:

  • 客户端 c2345 有 4 个调用。客户端 c2361 有 2 个调用。每个客户的平均调用次数为 (4+2)/2 = 3。
  • @Strawberry:拼写错误。
  • 每位销售员的平均通话次数为(2+1+3)/3 = 2
  • @Strawberry:我今天累了。倒过来了。
  • @Strawberry:有什么问题可以推荐吗?

标签: mysql count average


【解决方案1】:

这个怎么样:

SELECT COUNT(clientid) / COUNT(DISTINCT(clientid)) AS avg_calls_per_client
FROM calls_table
WHERE {date criteria}

SELECT COUNT(salespersonid) / COUNT(DISTINCT(salespersonid)) AS avg_calls_per_salesperson
FROM calls_table
WHERE {date criteria}

【讨论】:

    【解决方案2】:

    您可以尝试以下查询

    客户平均水平

    select avg(clientwisecnt.clientidcnt) from (select clientid, count(clientid) as clientidcnt from t group by clientid ) as 客户端;

    对于销售人员的平均水平

    select avg(salespersonwisecnt.salespersoncnt) from (select salespersonid, count(salespersonid) as salespersoncnt from t group by salespersonid ) 作为 salespersonwisecnt;

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多