我正在尝试获得返回值中前 80% 的返回值。使用 SQL DB for i TOP
子句将不起作用。我见过一些在嵌套 select 语句中使用 Count() 的示例,但我不确定它应该如何适合我已经编写的查询。我已经有 2 个子查询,所以我需要找出它如何适合,或者它是否有效。这是我到目前为止所拥有的:
Select CATEGORY,
LINE,
ITEM#,
Units
From D*****.*****ST
Inner Join (Select DW******.*****FO.ITEM,
Sum (SALES_UNITS) As Units,
CATEGORY
From DW*******.*****FO
Inner Join (Select CATEGORY,
DW****.******RY.ITEM
From DW****.******RY
Where CATEGORY='BRAKES') As CA***ST
On DW*******.*****FO.ITEM=CA*****.***M
Where ("DATE" between current date -1 years and current date) And (SALES > 5.00)
Group By DW*******.******O.ITEM,
CATEGORY) As Units_List
On DW****.*****ST.**EM#=U*********.***M
Group By CATEGORY,
LINE,
ITEM#,
Units
Order By Units DESC
所以这里的某个地方将是我假设的嵌套 Count()
子句,我只是不确定它在总体方案中的位置。我仍在学习一些中级 SQL 内容,所以如果问题看起来有点简单,我很抱歉。
最佳答案
我建议使用窗口函数。我发现您的查询很难理解,但想法如下:
select t.*
from (select t.*,
row_number() over (order by units desc) as seqnum,
count(*) over () as totnum
from (<view that gets you all the data you want>
) t
) t
where seqnum <= 0.8*totnum
这个想法是使用窗口函数来获取总计数和排名(我使用row_number()
,rank()
可能更合适,如果你有关系)。然后,您只需使用 where
子句即可获取所需的值。
关于sql - 使用 SQL DB for i 的行的最高百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14460695/