0

我试图创建一个评级的平均值。

我已经尝试过 AVG(列名)。然而,问题在于它对所有评级进行了总计并给出了平均值。

Select Company.company_id, company.Company_Name, avg(UserJobRating.Total_Rating)
from company
inner join UserJobRating on Job_id = UserJobRating.Job_ID
inner join jobs on jobs.Company_id = company.company_id
group by company.company_id

我想说的是,例如,一家特定的公司有 10/15 个工作,每个工作都有一个工作评级。我希望它将特定于该公司的工作组合在一起,并对该公司的所有工作进行平均评分。

为了做到这一点,我需要做什么类型的选择?

4

2 回答 2

2

我会从你的评论中猜测一下发生了什么,所以我认为你JOIN有点不对劲。试试这个:

Select Company.company_id, company.Company_Name, avg(UserJobRating.Total_Rating)
from company
  inner join jobs on jobs.Company_id = company.company_id
  inner join UserJobRating on jobs.Job_id = UserJobRating.Job_ID
group by company.company_id

在没有看到您的表定义的情况下,这有点猜测,但我敢打赌,您正在使用以下语句生成表Cartesian ProductUserJobRating

on Job_id = UserJobRating.Job_ID

于 2013-07-29T01:26:01.210 回答
0

你的问题是join条件:

Select Company.company_id, company.Company_Name, avg(UserJobRating.Total_Rating)
from company
inner join UserJobRating on Job_id = UserJobRating.Job_ID
----------------------------^
inner join jobs on jobs.Company_id = company.company_id
group by company.company_id

正在发生的事情是company没有一个名为Job_id. 所以,这个条件真的是:

inner join UserJobRating on UserJobRating.Job_id = UserJobRating.Job_ID

其中,本质上是 across join而不是 an inner join(唯一的区别是这会过滤掉NULL的值job_id)。

据推测,正确的字段在下一个表中,因此您需要重新排列连接中的表:

Select Company.company_id, company.Company_Name, avg(UserJobRating.Total_Rating)
from company
inner join jobs on jobs.Company_id = company.company_id
inner join UserJobRating on jobs.Job_id = UserJobRating.Job_ID
group by company.company_id;

这应该可以解决您的问题。

于 2013-07-29T01:31:48.577 回答