如何创建自动计算另一个表的列的平均值的列

时间:2016-07-12 18:56:43

标签: mysql

我正在创建一个Web应用程序,我会根据用户显示公司名称及其评级的表格。如果所有公司的平均评级列都会在新条目进行时自动更新,那么对我来说会容易得多。 例如,假设我有公司表:

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

和服务表,其中每个服务都被用户证明和评级(idCompany是FK)。

╔════╤═══════════╤═══════════════════════════════════════════════╤═══════════╗
║ 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           ║
╚════╧═════════════════════╧═══════════════╧═══════════════╝

2 个答案:

答案 0 :(得分:1)

此查询将为您提供结果。

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

您还可以使用此查询创建视图。

希望这有帮助

答案 1 :(得分:0)

您可以在将记录添加到Services表时设置触发器。触发器可能导致存储过程执行并更新averageRating表中的Companies