如何平均计数列但按特定职业
How to average count column but by specific occupations
我目前正在为 SQL class 做作业,但似乎不知道如何继续。从我所拥有的情况来看,我似乎无法平均每个职业的计数。到目前为止,我看到每个人借了多少本书。如果我尝试对列进行平均,它只会在我根据职业特别需要时将所有内容平均在一起。另外,我按clientId分组,因为每个客户都有多本借书。
作业是按职位划分的平均借书数。
借款人Table:
BorrowId(PK), ClientId(FK), BookId, BorrowDate
客户Table:
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)
如果你想找到所有职业的平均借书数量,那么使用:
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 Occupation, count(*) BooksBorrowed
FROM Borrower
NATURAL LEFT JOIN Clients
GROUP BY Occupation;
您只需要连接表格并按职业分组计算计数。
首先仅在 table 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;
INNER JOIN 将有助于找到平均计数
SELECT Occupation as Jobtitle, count(*) as BooksBorrowed
FROM Borrower
NATURAL INNER JOIN Clients
GROUP BY Occupation;
我目前正在为 SQL class 做作业,但似乎不知道如何继续。从我所拥有的情况来看,我似乎无法平均每个职业的计数。到目前为止,我看到每个人借了多少本书。如果我尝试对列进行平均,它只会在我根据职业特别需要时将所有内容平均在一起。另外,我按clientId分组,因为每个客户都有多本借书。
作业是按职位划分的平均借书数。
借款人Table:
BorrowId(PK), ClientId(FK), BookId, BorrowDate
客户Table:
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) |
如果你想找到所有职业的平均借书数量,那么使用:
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 Occupation, count(*) BooksBorrowed
FROM Borrower
NATURAL LEFT JOIN Clients
GROUP BY Occupation;
您只需要连接表格并按职业分组计算计数。
首先仅在 table 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;
INNER JOIN 将有助于找到平均计数
SELECT Occupation as Jobtitle, count(*) as BooksBorrowed
FROM Borrower
NATURAL INNER JOIN Clients
GROUP BY Occupation;