0

評価の平均を作成しようとしています。

私は 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の仕事があり、それぞれに仕事の評価があるとします。その会社に固有の仕事をグループ化し、その会社のすべての仕事の平均評価を与えたい.

これを行うには、どのタイプの選択を行う必要がありますか?

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 Productと思います:UserJobRating

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

これは、本質的に、cross joinではなく です(唯一の違いは、これがの値をinner join除外することです)。NULLjob_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 に答える