将两个MySQL查询与计算结合起来

时间:2017-07-27 13:59:27

标签: mysql

我有两个包含不同信息的表,但希望将它们作为一个表组合到报表中。

我可以设法将表与这些查询结合起来:

SELECT `id`, `name`, `info`, `food`, `drinks`, `service`, `ambience`, `hygiene`, `recommend`, `best_menu`, `best_service`, `author`, `username` 
FROM `restaurants` RIGHT JOIN `rating` ON `rating`.`rid` IN (1,2,3);

但是想要计算所有评级并在紧凑视图中显示名称和信息,如下所示:

SELECT `rid` as `id`, COUNT(*) as `count`, AVG(`food`+`drinks`+`service`+`ambience`+`hygiene`) as `average`, SUM(`food`) as `food`, SUM(`drinks`) as `drinks`, SUM(`service`) as `service`, SUM(`ambience`) as `ambience`, SUM(`hygiene`) as `hygiene`, concat(round(( SUM(`recommend`)/COUNT(*) * 100 ),2),'%') as `recommended`, `best_menu` as `best`, `best_service` as `service`, `voted` as `last vote` 
FROM `rating` WHERE `rid` IN (3,1,2) GROUP BY `rid` ORDER BY `best_menu`, `best_service`;

所以我的目标是带来" name"和"信息"从第一个表到第二个表的列。

请参阅此处的示例:

http://sqlfiddle.com/#!9/d5589/35

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

虽然不假装是最终解决方案,但此架构的规范化设计可能如下:

ratings_index
(rating_id*,rating_title,rating_type(integer,string));

users
(user_id*,username,email)

venues
(venue_id,name,address)

user_integer_ratings
(user_id*,venue_id*,rating_id*,rating)

user_string_ratings
(user_id*,venue_id*,rating_id*,rating)

* = (component of) PRIMARY KEY

答案 1 :(得分:0)

在玩完之后我终于可以建立正确的请求了。

sync -k

在这种情况下,我必须对所有餐馆都有评分,否则他们将无法显示。我同意@Strawberry构建标准化设计可以帮助避免这个问题。