【问题标题】:Find percentage of first row within the same column查找同一列中第一行的百分比
【发布时间】:2014-02-03 05:26:27
【问题描述】:

我有一个如下所示的表格:

Day | Count  
----+------
1   | 59547  
2   | 40448  
3   | 36707  
4   | 34492  

我希望它查询这样的结果集:

Day | Count | Percentage of 1st row  
----+-------+----------------------
1   | 59547 | 1  
2   | 40448 | .6793  
3   | 36707 | .6164  
4   | 34492 | .5792  

我尝试过使用窗口函数,但似乎只能获得总数的百分比,如下所示:

Day | Count | Percentage of 1st row  
----+-------+----------------------
1   | 59547 | 0.347833452  
2   | 40448 | 0.236269963  
3   | 36707 | 0.214417561  
4   | 34492 | 0.201479024  

但我想要 first 行的百分比。我知道我可以使用交叉连接,只查询“第 1 天”,但这似乎需要很长时间。我想知道是否有办法编写一个窗口函数来做到这一点。

【问题讨论】:

  • 您的 Postgres 版本?你试过什么?定义“第一行的百分比”。请使用formatting aids
  • 我使用的是 Postgres 9.1。感谢您在下面回答我的问题以及格式提示。看来我需要研究一下我的窗口功能。

标签: sql postgresql percentage window-functions


【解决方案1】:

从你的数字来看,你可能正在寻找这个:

SELECT *, round(ct::numeric/first_value(ct) OVER (ORDER BY day), 4) AS pct
FROM   tbl;

“每一行的百分比,计算为ct 除以第一行的ct,由最小的day 数字定义。”

密钥是window function first_value()

-> SQLfiddle demo.

【讨论】:

猜你喜欢
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多