如何计算列中的 AVG、MAX 和 MIN 行数

时间:2021-02-27 07:45:19

标签: mysql

我尝试收集有关通信深度的一般统计数据:每个请求的每种类型消息的平均、最大和最小数量。有 2 个表:

First:
ticketId,ticketQueueId,ticketCreatedDate

Second:
articleId,articleCreatedDt,articleType (can be IN or OUT - support responses), ticketId

我是这样推理的:

SELECT AVG(COUNT(articleType='IN')) AS AT_IN, AVG(COUNT(articleType='OUT')) AS AT_OUT 
FROM tickets.tickets JOIN tickets.articles
ON tickets.ticketId=articles.ticketId;
GROUP BY tickets.ticketId

但它不起作用。

错误代码:1111。组函数的使用无效

1 个答案:

答案 0 :(得分:1)

您不能使用嵌套聚合函数(AVG(COUNT())),而是使用适当的子查询并逐渐将聚合函数应用于子查询

还有你对count的使用不当

count 函数计算相关列不为空的每一行,因此在您的情况下,返回 0 或 1 的评估 articleType='IN'(或 articleType='OUT')永远不会为空

select AVG(T_IN), AVG(T_OUT)
from (
    SELECT sum(case when articleType='IN' then 1 else 0 END  AS T_IN, sum(case when articleType='OUT' then 1 else 0 END  AS T_OUT 
    FROM tickets.tickets 
    JOIN tickets.articles ON tickets.ticketId=articles.ticketId
    GROUP BY tickets.ticketId

) t

(你也有一个错误的分号)