【发布时间】:2021-04-16 10:55:06
【问题描述】:
我有以下示例表“发票”。
+----------------+-------------+--------+
| invoice_number | date | status |
+----------------+-------------+--------+
| 1 | 2 apr 2021 | 1 |
+----------------+-------------+--------+
| 2 | 9 apr 2021 | 0 |
+----------------+-------------+--------+
| 3 | 9 apr 2021 | 1 |
+----------------+-------------+--------+
| 4 | 9 apr 2021 | 1 |
+----------------+-------------+--------+
| 5 | 16 apr 2021 | 1 |
+----------------+-------------+--------+
| 6 | 16 apr 2021 | 0 |
+----------------+-------------+--------+
| 7 | 16 apr 2021 | 0 |
+----------------+-------------+--------+
| 8 | 16 apr 2021 | 0 |
+----------------+-------------+--------+
| 9 | 16 apr 2021 | 1 |
+----------------+-------------+--------+
(在状态中,1 表示已付款,0 表示未付款) 并从中我试图得到以下信息:
- 每周的发票数量(每个日期为一周,因此每个日期一组有效)
- 这些发票已支付的百分比(按日期分组)
我试图使用窗口函数来更好地组织(因为我有更多的字段,这只是为了示例而简化)
我在做
select date,
count(invoice_number) over (partition by date) as NumberOfInvoices,
(sum(status)/count(status) over (partition by date))*100 as percentagePaid
from invoices
但这当然行不通,同时我得到了表的所有行作为结果,而不是按日期分组。
我应该停止尝试使用这里的过度分区吗?还是我只是错误地应用它来满足我的需要?
【问题讨论】:
-
样本数据很好,但您也应该指定预期的结果。
标签: sql sql-server window-functions