2016-07-12 6 views
1

私は、会社の名前とユーザーの評価で表を表示するWebアプリケーションを作成しています。新しいエントリが作成されたときに自動的に更新されるすべての企業の平均格付けを持つ列があれば、はるかに簡単です。 例えば、私は会社のテーブルを持っているとしましょう:すべてのサービスは、ユーザー(idCompanyがFKである)によってevidentedと評価されて別の表の列から平均を自動的に計算する列を作成する方法

╔════╤═════════════════════╤═══════════════╗ 
║ id │ nameOfTheCompany │ owner   ║ 
╠════╪═════════════════════╪═══════════════╣ 
║ 1 │ Computer Repair LLC │ John Doe  ║ 
╟────┼─────────────────────┼───────────────╢ 
║ 2 │ Unimatrix   │ Barrack Obama ║ 
╚════╧═════════════════════╧═══════════════╝ 

とサービステーブル。

╔════╤═══════════╤═══════════════════════════════════════════════╤═══════════╗ 
║ id │ idCompany │ serviceType         │ userGrade ║ 
╠════╪═══════════╪═══════════════════════════════════════════════╪═══════════╣ 
║ 1 │ 1   │ Installing antivirus and antispyware software │ 3   ║ 
╟────┼───────────┼───────────────────────────────────────────────┼───────────╢ 
║ 2 │ 2   │ Replacing new HDD        │ 4   ║ 
╟────┼───────────┼───────────────────────────────────────────────┼───────────╢ 
║ 3 │ 1   │ Replacing new RAM        │ 1   ║ 
╟────┼───────────┼───────────────────────────────────────────────┼───────────╢ 
║ 4 │ 2   │ CPU Cleaning         │ 5   ║ 
╚════╧═══════════╧═══════════════════════════════════════════════╧═══════════╝ 

私はこれ持っている最初のテーブルに新しい列を作りたい:

╔════╤═════════════════════╤═══════════════╤═══════════════╗ 
║ id │ nameOfTheCompany │ owner   │ averageRating ║ 
╠════╪═════════════════════╪═══════════════╪═══════════════╣ 
║ 1 │ Computer Repair LLC │ John Doe  │ 2    ║ 
╟────┼─────────────────────┼───────────────┼───────────────╢ 
║ 2 │ Unimatrix   │ Barrack Obama │ 4.5   ║ 
╚════╧═════════════════════╧═══════════════╧═══════════════╝ 
+0

トリガーを使用して、他のテーブルが変更されたときに自動的に列を更新することができます。あるいは、単にビューを定義することもできます。 – Barmar

+0

まず、私は初心者です。D。私は他のテーブルからデータを収集するSQLクエリにカラムのデフォルト値を設定するようないくつかの愚かなことを試みました。しかし、明らかにそれは動作していません。トリガーとビューは新しいトピックです。私はこれらのチュートリアルを見つけて、@Abhay Sarafが言ったことを試してみましょう。 – harunB10

答えて

1

このクエリによって結果が得られます。

select c.*, avg(userGrade) as averageRating from table.company c join table.service s on c.id=s.idCompan group by s.idCompany; 

このクエリを使用してビューを作成することもできます。

希望する

0

のイベントがServicesテーブルにレコードを追加するときは、トリガを設定できます。このトリガーにより、ストアード・プロシージャーはCompanies表のaverageRatingを実行および更新できます。

関連する問題