找到一个普通的SQL

时间:2013-07-29 00:55:47

标签: mysql sql average

我试图在评分上创建平均值。

我试过了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个工作,每个工作都有一个工作评级。我希望它将特定于该公司的工作组合在一起,并为公司的所有工作提供平均评级。

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

2 个答案:

答案 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

这可以解决您的问题。