假设我有下表:
--------------------------------------------
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
的情况下执行此操作?
答案 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)
另一种方法是使用rank
或dense_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 记录的所有记录。