SQL在特殊情况下计算百分比

SQL在特殊情况下计算百分比,sql,database,Sql,Database,我知道SQL有一个平均函数。我的问题是,我有一个TRIPADVISOR表,其中包括餐厅名称、排名(1-10)、客户审核分数(1-5)列。我想计算总人数中给出4分的人占总人数的百分比,即count()的元素总数。我怎么能做到呢?我在select子句中设置了两个子查询,其中显示了给出4分的总人数和条目总数,即count(),以及餐厅名称和所有等级的列表。谢谢 您可以尝试使用计数的案例 select RESTAURANT, RANK, (select count(SCOR

我知道SQL有一个平均函数。我的问题是,我有一个TRIPADVISOR表,其中包括餐厅名称、排名(1-10)、客户审核分数(1-5)列。我想计算总人数中给出4分的人占总人数的百分比,即count()的元素总数。我怎么能做到呢?我在select子句中设置了两个子查询,其中显示了给出4分的总人数和条目总数,即count(),以及餐厅名称和所有等级的列表。谢谢

您可以尝试使用计数的
案例

select 
    RESTAURANT, 
    RANK, 
    (select count(SCORE) 
     from TRIPADVISOR 
     where score = 4) as totalfour, 
    (select count(*) 
     from TRIPADVISOR) as total   
from 
    TRIPADVISOR 

如果您想在每家餐厅购买:

SELECT
 RESTAURANT, 
 RANK, 
 ((COUNT(CASE WHEN score = 4 THEN 1 END) * 1.0) / COUNT(*))*100 AS PercentageScore4
FROM TRIPADVISOR
GROUP BY RESTAURANT, RANK;
如果要对整个数据库执行此操作:

select restaurant,
       avg(case when score = 4 then 1.0 else 0 end) as avg_4
from TRIPADVISOR 
group by restaurant;
如果要将其附加到每行,请使用窗口函数:

select avg(case when score = 4 then 1.0 else 0 end) as avg_4
from TRIPADVISOR ;

您使用的是什么数据库引擎?示例数据和期望的结果将非常有用。
select restaurant,
       avg(case when score = 4 then 1.0 else 0 end) over (partition by restaurant) as avg_4_restaurant,
       avg(case when score = 4 then 1.0 else 0 end) over () as avg_4_overall
from TRIPADVISOR ;