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

时间:2015-08-17 08:23:45

标签: sql sql-server-2014

假设我有一个x行数的表。现在在这个表中我有一行我想知道从这行的顶部开始排序的所有行的百分比。

例如,发现该行位于所有行的前27%或所有行的前65%之内等。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

例如:

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

要获取SQL Server的行号,请检查ROW_NUMBER

如果我没有得到您的要求,请告诉我,我会更新我的答案。

答案 2 :(得分:0)

您必须获得唯一的序列来标识每一行。在以下查询中是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