2013-07-29 198 views
0

即时通讯尝试创建评分的平均值。查找平均SQL

我试过AVG(column_name)。然而,这个问题是它为所有的评级做了总计,并给出了平均值。

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 

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

我需要做什么类型的选择才能做到这一点?

+3

你需要一个group by子句。 –

回答

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

+0

是的人,那是...你做了什么来改变它?我可以看到不同的是内部连接的顺序 –

+1

@AndrewGlass - 当加入'userjobrating'表时,您需要引用'jobs.job_id'字段。很高兴我能帮上忙! – sgeddes

+0

非常感谢:) –

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 

其中,实质上,一个而不是inner joincross join(唯一的区别是,这将筛选出的job_idNULL值)。

据推测,正确的字段是下一个表,所以你需要重新排列连接表:

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; 

这应该解决您的问题。