我试图在评分上创建平均值。
我试过了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
我想要的是,例如,一家特定公司有10/15个工作,每个工作都有一个工作评级。我希望它将特定于该公司的工作组合在一起,并为公司的所有工作提供平均评级。
为了做到这一点,我需要做什么类型的选择?
答案 0 :(得分: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 Product
表生成UserJobRating
这个语句:
on Job_id = UserJobRating.Job_ID
答案 1 :(得分: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
其实基本上是cross join
而不是inner join
(唯一的区别是这会过滤掉NULL
的{{1}}个值。
据推测,正确的字段位于下一个表格中,因此您需要重新排列连接中的表格:
job_id
这可以解决您的问题。