【问题标题】:How to average count column but by specific occupations如何平均计数列但按特定职业
【发布时间】:2022-01-24 08:01:25
【问题描述】:

我目前正在为一个 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)

【问题讨论】:

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

标签: mysql sql group-by count average


【解决方案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 子句确定用于聚合的组。
【解决方案2】:

INNER JOIN 将帮助找到平均计数

SELECT Occupation as Jobtitle, count(*) as BooksBorrowed 
FROM Borrower 
NATURAL INNER JOIN Clients 
GROUP BY Occupation;

【讨论】:

    【解决方案3】:

    首先仅在表Borrower 中聚合以获取计数,然后加入Client 以获取每个Occupation 的平均值:

    SELECT c.Occupation, AVG(b.counter) average_count
    FROM Client c
    INNER JOIN (
      SELECT ClientId, COUNT(*) counter
      FROM Borrower
      GROUP BY ClientId
    ) b ON b.ClientId = c.ClientId
    GROUP BY c.Occupation;
    

    【讨论】:

      【解决方案4】:

      解决方法很简单:

      SELECT Occupation, count(*) BooksBorrowed
      FROM Borrower
      NATURAL LEFT JOIN Clients
      GROUP BY Occupation;
      

      SQL fiddle

      您只需要加入表格并按职业分组计算计数。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      相关资源
      最近更新 更多