如何检查一行在 sql 中占所有行的百分比

How to check what percent of all rows a row is within in sql

假设我有一个 table,行数为 x。现在,在这个 table 中,我有一行,我想找出该行存在于从顶部排序的所有行中的百分比。

例如,找出该行在所有行的前 27% 或所有行的前 65% 内,等等

感谢任何帮助或意见,谢谢!

如果我理解正确,你在查询中需要的是检索行号,将其除以总行数("x" 在你的问题中)然后乘以 100 得到百分比。

Row Percentage = (Row Number / Total Row Count) * 100

例如:

Row Percentage = (6 / 32) * 100
Row Percentage = 18.75%

为了获得SQL服务器的行号,请勾选ROW_NUMBER

如果我没有明白您的问题,请告诉我,我会更新我的答案。

create table TempTable (id int, myValue int)

insert into TempTable(id, myValue) values (1, 5)
insert into TempTable(id, myValue) values (2, 15)
insert into TempTable(id, myValue) values (3, 20)
insert into TempTable(id, myValue) values (4, 50)
insert into TempTable(id, myValue) values (5, 60)

select
  RowNumber * 100.0 / TotalRows as Percentage1,
  (TotalRows - RowNumber) * 100.0 / TotalRows as Percentage2,
  myValue
from 
(
  SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber,
  COUNT(*) OVER() AS TotalRows,
  myValue
  FROM TempTable
) t
where myValue = 50

我不确定您想要的确切百分比,所以这里是您从上述查询中获得的两个值。

Percentage1 Percentage2 myValue
80          20          50

http://sqlfiddle.com/#!6/b0e20/15/0

处的完整 SQLFiddle

您必须获得唯一的序列号才能识别每一行。在以下查询中,它是 sl。然后你就可以在所有行中找到一行的百分比位置。

SELECT *, ROW_NUMBER() OVER(ORDER BY accountNO)  AS sl
INTO #temp
FROM testTable

SELECT * FROM #temp

-- For sl = 1
SELECT ((1) * 100) /  (SELECT MAX(sl) FROM #temp) -- Within Top 4%

-- For sl = 5
SELECT ((5) * 100) /  (SELECT MAX(sl) FROM #temp) -- Within Top 20%

-- For sl = 10
SELECT ((10) * 100) /  (SELECT MAX(sl) FROM #temp) -- Within Top 40%

-- For sl = 15
SELECT ((15) * 100) /  (SELECT MAX(sl) FROM #temp) -- Within Top 60%

-- For sl = 20
SELECT ((20) * 100) /  (SELECT MAX(sl) FROM #temp) -- Within Top 80%

-- For sl = 25
SELECT ((25) * 100) /  (SELECT MAX(sl) FROM #temp) -- Within Top 100%

DROP TABLE #temp