2013-07-29 193 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; 

這應該解決您的問題。