【问题标题】:How to assign a percentage of in SQL?如何在 SQL 中分配百分比?
【发布时间】:2019-05-02 09:09:21
【问题描述】:
| proj_id | list_date  | state  | Status     | 
|   1     |   03/05/10 |   CA   | Finished   |
|   2     |   04/05/10 |   WA   | Unfinished |
|   3     |   03/05/10 |   WA   | Finished   |
|   4     |   04/05/10 |   CA   | Finished   |
|   5     |   03/05/10 |   WA   | Unfinished |
|   6     |   04/05/10 |   CA   | Finished   |

我可以写什么查询来确定每个上市月份和状态的项目完成的百分比?

我目前编写了以下代码,按月份和状态对项目数量进行分组

select 
    month(list_date), state_name, count (*) as Projects 
from 
    projects 
group by 
    month(list_date), state_name;

然后我如何合并每个上市月份的项目百分比和已完成或未完成的状态?

期望的输出:

     | list_date | state  | Proj_Count | % Finished
     |   March   |   CA   |     2      |    10%    
     |   April   |   WA   |     3      |    20%
     |   July    |   WA   |     6      |    50%
     |   August  |   CA   |     5      |    40%

【问题讨论】:

  • 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ...
  • 我正在使用 MySql

标签: sql


【解决方案1】:

您可以使用avg() 聚合函数轻松做到这一点:

select month(list_date), state_name, count(*) as Projects,
       avg(case when status = 'Finished' then 100.0 else 0 end) as percent_finished 
from projects 
group by month(list_date), state_name;

要了解它是如何工作的,只需举个例子:

Finished        100
Unfinished        0
Finished        100
Unfinished        0
Unfinished        0

平均值为(100 + 100) / 5 = 40。这就是您要查找的百分比。

【讨论】:

  • 快速提问 - 您介意解释上述代码的基本原理/操作吗?这对我理解有很大帮助。我很难理解 avg (status = 'finished' 然后 100.0 else 0 的情况以及它如何导致 percent_finished。
【解决方案2】:

把这个放在选择中:

100 * count(case when state = 'Finished' then 1 else null end) / cast(count(*) as float)

我不清楚您是希望按州和月份完成百分比,还是按月份完成。如果是后者,那就更复杂了

Count 计算集合中的非空值。如果状态结束,则返回 1。如果状态是其他任何东西,则返回 null 并且它不计入计数

请注意,上面的计算将使用 INT 完成,因此我们将其中一个操作数转换为浮点数(或您的数据库支持的任何小数点类型),以便使用小数位完成计算。如果没有这个,一些 db 只会产生 0,因为 small_int/large_int 总是 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2020-08-07
    • 2021-02-05
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多