如何平均计数列但按特定职业

分享于2022年07月17日 average count group-by mysql sql 问答
【问题标题】:如何平均计数列但按特定职业(How to average count column but by specific occupations)
【发布时间】:2022-01-24 08:01:25
【问题描述】:

How to average count column but by specific occupations

我目前正在为一个 SQL 类做作业,但似乎不知道如何继续。从我所拥有的继续下去,我似乎无法平均每个职业的计数。到目前为止,我可以看到每个人借了多少本书。如果我尝试对列进行平均,它只会在我特别需要时按职业对所有内容进行平均。另外,我按 clientId 分组,因为每个客户都借了多本书。

作业是按职称平均借书数。

借款人表:

BorrowId(PK), ClientId(FK), BookId, BorrowDate

客户表:

ClientId(PK), ClientFirstName, ClientLastName, ClientDoB, Occupation

这是我目前所拥有的。

SELECT **, count(*)
FROM borrower
INNER JOIN client on borrower.ClientId = client.ClientId
GROUP BY borrower.ClientId

这是我从到目前为止的查询中得到的信息。我的目标是按职业平均这些计数。因此,例如,我希望它显示

Occupation Avg of occupation
Bus Driver 4 (14/4)
Cashier 5
Computer Engineer 3 (6/2)
Computer Programmer 5.666 (17/3)

  • 你得到了什么结果集,它是怎么错的?
  • 这是什么双星 * *?
  • 对不起,双星是一个错误,我目前的结果只显示每个人的计数。我需要按每个职业平均计数。
  • 请为两个表添加示例数据,然后向我们展示您期望的输出。在您完成此操作之前,您还没有提出完整的问题。

【解决方案1】:

如果你想找到所有职业的平均借书数量,那么使用:

SELECT AVG(num_books)
FROM 
(
    SELECT COUNT(b.ClientId) AS num_books
    FROM client c
    LEFT JOIN borrower b ON b.ClientId = c.ClientId
    GROUP c.Occupation
) t;

这里的想法是,上面别名为 t 的中间子查询中的每条记录对应于某个职业的书籍数量。然后我们包装该查询并取所有计数的平均值以获得总体平均图书计数。

  • 这将返回包含所有职业的平均一行。我需要找到每个职业的平均值。
  • 只需要在select语句中添加职业即可。然后,这将计算每个职业的平均值。
  • @GCJ 实际上,在 select 子句中添加职业是没有实际意义的。 group by 子句确定用于聚合的组。