是否可以在不使用嵌套SELECTS的情况下这样做?

时间:2015-12-25 14:20:29

标签: sql sql-server oracle11g

假设我有下表:

--------------------------------------------
ReceiptNo |    Date     | EmployeeID | Qty
--------------------------------------------
    1     | 12-DEC-2015 |     1      | 200
    2     | 13-DEC-2015 |     1      | 500
    3     | 13-DEC-2015 |     1      | 100
    4     | 13-DEC-2015 |     3      | 100
    5     | 13-DEC-2015 |     3      | 500
    6     | 13-DEC-2015 |     2      |  75
--------------------------------------------
  

显示最大数量的元组。

答案:

--------------------------------------------
    2     | 13-DEC-2015 |     1      | 500
    5     | 13-DEC-2015 |     3      | 500
--------------------------------------------

我需要使用聚合函数MAX()

是否可以在不使用嵌套SELECTS的情况下执行此操作?

3 个答案:

答案 0 :(得分:4)

sql server

中试试
SELECT TOP 1 WITH TIES *
FROM TABLE
ORDER BY QTY DESC

答案 1 :(得分:2)

没有

您无法使用max聚合函数显示具有最大数量的元组,同时避免嵌套选择。

VR46发布了一种很好的方法,可以在不使用嵌套选择的情况下完成,但也没有max聚合。可以使用FETCH子句在Oracle 12c中使用类似的方法:

select *
  from table
 order by qty desc
 fetch first row with ties

如果您想使用max聚合,可以这样做:

select *
  from table
 where qty = (select max(qty) from table)

另一种方法是使用rankdense_rank窗口函数,但它们需要嵌套选择,不要使用max聚合函数:

select *
  from (select t.*,
               dense_rank() over (order by t.qty desc) as rnk
          from table t) t
 where t.rnk = 1

答案 2 :(得分:0)

不使用max,而是使用没有嵌套查询的简单“跨平台”ANSI SQL:

SELECT t1.*
FROM mytable t1
LEFT OUTER JOIN mytable t2 ON t2.Qty > t1.Qty
WHERE t2.Qty IS NULL

检索同一表格中数量较大的 no 记录的所有记录。