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

Posted

技术标签:

【中文标题】SQL计算特殊情况下的百分比【英文标题】:SQL calculate percentage in a special case 【发布时间】:2018-10-06 04:26:36 【问题描述】:
select 
    RESTAURANT, 
    RANK, 
    (select count(SCORE) 
     from TRIPADVISOR 
     where score = 4) as totalfour, 
    (select count(*) 
     from TRIPADVISOR) as total   
from 
    TRIPADVISOR 

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

【问题讨论】:

你用的是什么数据库引擎? 样本数据和期望的结果真的很有帮助。 【参考方案1】:

您可以尝试使用计数CASE

SELECT
 RESTAURANT, 
 RANK, 
 ((COUNT(CASE WHEN score = 4 THEN 1 END) * 1.0) / COUNT(*))*100 AS PercentageScore4
FROM TRIPADVISOR
GROUP BY RESTAURANT, RANK;

【讨论】:

【参考方案2】:

如果您希望每家餐厅都这样:

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 ;

【讨论】:

以上是关于SQL计算特殊情况下的百分比的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 SQL 表中前一个数字的百分比?

使用sql语句计算百分比

重学SQL窗口函数

sql SQL计算表中值实例的百分比

SQL Server 计算 sql pivot 值的百分比

SQL:计算输出列上出现的次数并根据出现次数计算一些百分比