我正在创建一个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 ║
╚════╧═════════════════════╧═══════════════╧═══════════════╝
答案 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
。