【问题标题】:how to select n rows如何选择n行
【发布时间】:2010-12-16 16:13:59
【问题描述】:

我有一个关于几家公司的数据库,其中包括它们的名称、股价、年龄变化百分比:

NAME           PRICE              % CHANGE
-------------------------------------------------
a              67                  11
b              23                  6
c              456                 5.89  
d              112                 23.98       
e              31                  17            
f              78                  3.09              
g              2678                12.56                   
h              357                 4.6                

我想明智地选择前 5 行 %age,这意味着要在顶部显示的最大 %age...n 在 desc 中再增加 4 个值。订购...

输出应该是

NAME           PRICE              % CHANGE
-------------------------------------------------
d              112                 23.98   
e              31                  17            
g              2678                12.56  
a              67                  11   
b              23                  6              

【问题讨论】:

    标签: sql mysql sql-server database oracle


    【解决方案1】:

    使用 MySQL/Postgres:

      SELECT t.name,
             t.price,
             t.change
        FROM TABLE t
    ORDER BY t.change DESC
       LIMIT 5
    

    LIMIT 子句:

    使用 SQL Server:

      SELECT TOP 5
             t.name,
             t.price,
             t.change
        FROM TABLE t
    ORDER BY t.change DESC
    

    TOPsupported on SQL Server 2000+ at least

    甲骨文:

    SELECT x.*
      FROM (SELECT t.name,
                   t.price,
                   t.change
              FROM TABLE t
          ORDER BY t.change DESC) x
     WHERE ROWNUM <= 5
    

    甲骨文的ROWNUM

    【讨论】:

    • 我也想要 Oracle 语法! :-) 实际上,它最接近 ISO SQL 2008(因为 ROW_NUMBER() 是 ISO SQL“窗口函数”之一)。
    • 已更新以提供文档链接。
    • 谢谢 :-) 我已经为你投票了,所以我不能再这样做了。
    【解决方案2】:
    select top 5 * from tblname order by change desc
    

    【讨论】:

      【解决方案3】:

      排序和限制
      SELECT * FROM company ORDER BY change DESC LIMIT 5;

      【讨论】:

        【解决方案4】:

        这个怎么样?

        SELECT * FROM table ORDER BY change DESC LIMIT 5
        

        编辑:注意change应该是您列为% CHANGE的列的名称...

        【讨论】:

          【解决方案5】:

          除非我有什么误解……这是基本的 SQL:

          SELECT * FROM table ORDER BY change DESC LIMIT 5;
          

          【讨论】:

          • LIMIT 子句不是基本 SQL - 只有 MySQL 和 Postgres 支持该语法
          猜你喜欢
          • 2020-11-14
          • 2021-10-20
          • 2017-11-02
          • 2017-09-10
          • 2012-06-10
          • 1970-01-01
          • 2018-02-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多