Mysql 如何从sql中的字段计算相同的评级

Mysql 如何从sql中的字段计算相同的评级,mysql,sql,Mysql,Sql,我在SQL中计算评级时遇到问题。以下是我的数据: 结果应该是这样的,显示所有评级(1,2,3,4,5)及其在rating\u clean、rating\u delicious和rating\u clean 谢谢你的帮助 但是我得到的结果 SELECT COUNT(`factor_clean`+`factor_delicious`),'1' AS rating_1 FROM `factors` WHERE 1 GROUP BY `id_restaurant` 结果不应该是这样,, 我的问题

我在SQL中计算评级时遇到问题。以下是我的数据:

结果应该是这样的,显示所有评级(1,2,3,4,5)及其在
rating\u clean
rating\u delicious
rating\u clean

谢谢你的帮助

但是我得到的结果

SELECT COUNT(`factor_clean`+`factor_delicious`),'1' AS rating_1 FROM `factors` WHERE 1 GROUP BY `id_restaurant`

结果不应该是这样,,
我的问题是,如何选择factor_clean和factor_delicious,其中factor_clean=1和factor_delicious=1

例如,这是colums rating_delicious和rating_clean(只有一个!)表的解决方案:

首先,您应该创建额外的表,我称之为因子:

CREATE TABLE `factors` (
 `factor_id` int(11) NOT NULL AUTO_INCREMENT,
 `factor_clean` int(11) NOT NULL DEFAULT '0',
 `factor_delicious` int(11) NOT NULL DEFAULT '0',
 PRIMARY KEY (`factor_id`)
)
接下来添加两条记录:

INSERT INTO `factors` (`factor_id`, `factor_clean`, `factor_delicious`) VALUES (NULL, '1', '0'), (NULL, '0', '1');
现在,您可以加入这些表并获得结果:

SELECT x.id_restaurant
     , (x.rating_clean * f.factor_clean) + (x.rating_delicious * f.factor_delicious) AS rating
     , count(*) 
  FROM your_table x
  JOIN factors f
 WHERE 1 
 GROUP 
    BY x.id_restaurant
     , rating

为了使用下一列(
rating\u third
),您应该将
factor\u third
列和
factors
,在此列中插入带有
1
的新行,最后添加类似
您的\u表的内容。评级\u第三*因子。因子\u第三
要在
中求和,请选择

使用
联合所有
取消抽取数据,然后聚合:

select id_restaurant, rating, count(*)
from ((select r.id_restaurant, r.rating_clean as rating, r.date
       from ratings r
      ) union all
      (select r.id_restaurant, r.rating_delicious, r.date
       from ratings r
      ) union all
      (select r.id_restaurant, r.rating_clean2, r.date
       from ratings r
      ) 
     ) r
group by id_restaurant, rating
order by id_restaurant, rating;

此站点不是免费的代码编写器。。最好将您的查询放在哪里并显示它的位置您不能在同一个表中有两个名为rating_clean的列。您可以通过将示例数据和预期输出作为文本以及您迄今为止所做的工作来改进此问题。我猜此时您需要count和group by。如果您的评级值不固定,那么您将需要动态sql。您的数据不可能是这样的。请参阅@P.Salmon抱歉,现在我添加了一些查询、示例数据,并输出了我希望的内容,谢谢:)
select id_restaurant, rating, count(*)
from ((select r.id_restaurant, r.rating_clean as rating, r.date
       from ratings r
      ) union all
      (select r.id_restaurant, r.rating_delicious, r.date
       from ratings r
      ) union all
      (select r.id_restaurant, r.rating_clean2, r.date
       from ratings r
      ) 
     ) r
group by id_restaurant, rating
order by id_restaurant, rating;