sql - 使用 SQL DB for i 的行的最高百分比

标签 sql odbc db2 ibm-midrange

我正在尝试获得返回值中前 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/

相关文章:

java - 如何使用Hibernate调用存储过程?

sql - MariaDB JSON 函数与数组

java - 如何在 Java 中将 TemporalType.TIMESTAMP 转换为 Date()?

java - 使用 Java 连接到 Oracle DSN 时出错

java - 使用 JDBC 连接到 DB2 Linux 数据库

python - 从 python 数据帧插入 DB2 表

mysql - 如何在 SQL 查询中检测泰语

sql - 获取满足给定条件的连续天数

go - Go 中的 ODBC 返回空/空白记录

c# - 从 MySQL 到 MS Access 的 1GB 数据