【问题标题】:Getting percentage of each value in a row [duplicate]获取一行中每个值的百分比[重复]
【发布时间】:2018-12-24 04:14:17
【问题描述】:

我有一个非常简单的客户名称细分,以及该名称的相应计数。我需要的是第三列,它给出了具有该名称的客户的百分比。

这是我需要的示例:

|NAME|       |NAME_COUNT|    |NAME_PERCENT|
 Bob          5               41.7
 John         4               33.3
 Toby         3               25.0

我有前两个字段,但似乎无法确定百分比。

我的查询的最后部分如下所示:

SELECT
a.Name
a.Name_Count

FROM #NameTemp a

GROUP BY
a.Name,
a.Name_Count

ORDER BY
a.Name_Count DESC

我认为这可以在 select 语句中获取每行的百分比,但事实并非如此。它只是给我 Percent 字段中每一行的值 1:

a.Name_Count/SUM(a.NameCount) AS "Percent"

【问题讨论】:

  • 需要将INT 值转换为NUMERIC()

标签: sql sql-server


【解决方案1】:

只使用窗口函数:

select name, name_count, name_count * 1.0 / sum(name_count) over ()
from #nametemp;

注意* 1.0。 SQL Server 做整数除法,所以需要转换成有小数位的格式。

我猜你有一个未聚合的原始表。如果是这样,在没有临时表的情况下在一个查询中完成这一切是一个更好的解决方案:

select name, count(*) as name_count, count(*) * 1.0 / sum(count(*)) over ()
from names
group by name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2017-03-10
    • 1970-01-01
    相关资源
    最近更新 更多