[英]Getting percentage value of records using the max count of records in SQL Server
[英]How to get the percentage of records with valid date using SQL Server?
我有一張桌子說產品
Id ProductName DueDate
---------------------------
1 A 9999-12-31
2 B 9999-12-31
3 C 9999-12-31
4 D 2017-08-10
and so on
我必須計算有效截止日期(忽略9999-12-31)的行百分比是否大於60%。 還從具有有效日期的表中獲取所有ID。
我試圖使用SUM和case條件來獲取百分比。 我也該如何獲取ID。 我嘗試了Sub查詢。 還有其他方法嗎?
您可以使用窗口功能來完成此任務。 注意,如果需要,您也可以在over clause
使用partition by
(例如,按乘積進行計算)。
MS SQL Server 2014架構設置 :
CREATE TABLE Table1
([Id] int, [ProductName] varchar(1), [DueDate] datetime)
;
INSERT INTO Table1
([Id], [ProductName], [DueDate])
VALUES
(1, 'A', '9999-12-31 00:00:00'),
(2, 'B', '9999-12-31 00:00:00'),
(3, 'C', '9999-12-31 00:00:00'),
(4, 'D', '2017-08-10 00:00:00'),
(5, 'D', '2017-08-10 00:00:00'),
(6, 'D', '2017-08-10 00:00:00'),
(7, 'D', '2017-08-10 00:00:00'),
(8, 'D', '2017-08-10 00:00:00'),
(9, 'D', '2017-08-10 00:00:00'),
(10, 'D', '2017-08-10 00:00:00')
;
查詢1 :
select
*
from (
select
*
, case when DueDate <> '99991231' then 1 else 0 end as is_valid
, (count(case when DueDate <> '99991231' then DueDate end) over() * 1.0)
/ count(*) over() as pct
from table1
) d
where is_valid = 1
結果 :
| Id | ProductName | DueDate | is_valid | pct |
|----|-------------|----------------------|----------|-----|
| 4 | D | 2017-08-10T00:00:00Z | 1 | 0.7 |
| 5 | D | 2017-08-10T00:00:00Z | 1 | 0.7 |
| 6 | D | 2017-08-10T00:00:00Z | 1 | 0.7 |
| 7 | D | 2017-08-10T00:00:00Z | 1 | 0.7 |
| 8 | D | 2017-08-10T00:00:00Z | 1 | 0.7 |
| 9 | D | 2017-08-10T00:00:00Z | 1 | 0.7 |
| 10 | D | 2017-08-10T00:00:00Z | 1 | 0.7 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.