【问题标题】:Calculate percentage between two columns in SQL Query as another column将 SQL Query 中两列之间的百分比计算为另一列
【发布时间】:2016-07-31 14:12:29
【问题描述】:

我有一个包含两列的表格,最大位置数(容量)和可用位置数(availablePlaces)

我想将 availablePlaces 计算为容量的百分比。

availablePlaces    capacity
1                  20
5                  18
4                  15

期望的结果:

availablePlaces    capacity  Percent
1                  20        5.0
5                  18        27.8
4                  15        26.7

有任何关于 SELECT SQL 查询的想法可以让我这样做吗?

【问题讨论】:

    标签: sql percentage


    【解决方案1】:

    以下 SQL 查询将为您执行此操作:

    SELECT availablePlaces, capacity, (availablePlaces/capacity) as Percent 
    from table_name;
    

    【讨论】:

    • 这将进行整数除法并返回 0 或 1。
    【解决方案2】:

    试试这个:

    SELECT availablePlaces, capacity, 
           ROUND(availablePlaces * 100.0 / capacity, 1) AS Percent
    FROM mytable
    

    你必须乘以 100.0 而不是 100,以避免整数除法。此外,您必须使用ROUND 舍入到第一个小数位。

    Demo here

    【讨论】:

    • @missdevops 很高兴我能提供帮助。如果它帮助您解决问题,请将此或任何其他答案标记为已接受。
    • 完美,正是我需要的!最初没有 ROUND() 并且没有除以 100.0 并且只得到零和一。非常感激。 :-)
    • 您对乘以 100.0 而不是 100 的评论是我案例的关键。谢谢。
    • 对于 SSMS 中的 SQL Server,输出将显示一堆尾随零,因为它会将其转换为小数。您必须将其转换为浮点数以删除尾随零: ROUND(CAST(availablePlaces * 100.0 / capacity as FLOAT), 1)
    【解决方案3】:

    为什么不使用诸如format_number(或数据库中的等效函数)之类的数字格式化函数将双精度数格式化为百分比?这个例子是通用的。返回值是一个字符串。

    WITH t 
    AS 
    ( 
        SELECT count(*) AS num_rows, count(foo) as num_foo
        FROM mytable
    )
    
    SELECT *, format_number(num_foo/num_rows, '#.#%') AS pct_grade_rows
    FROM t
    

    这避免了使用round 并将分子乘以100。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2017-06-09
      • 2023-02-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多