如何在SQL中获得销售总额的最大值?
我有一个简单的任务,但我卡住了,我有一个表,需要打印出最大总销售额的ID。我已根据每个人的销售额之和打印出ID的排序列表:如何在SQL中获得销售总额的最大值?,sql,oracle,Sql,Oracle,我有一个简单的任务,但我卡住了,我有一个表,需要打印出最大总销售额的ID。我已根据每个人的销售额之和打印出ID的排序列表: SELECT "COMPANY"."ID", SUM("COMPANY"."PRICE") As PriceSum FROM "COMPANY" WHERE "COMPANY"."DATEOFSALE" >= DATE '2016-01-01' GROUP BY "COMPANY"."ID" ORDER BY PriceSum DESC; 我只想显示最畅销公司的ID
SELECT "COMPANY"."ID", SUM("COMPANY"."PRICE") As PriceSum
FROM "COMPANY"
WHERE "COMPANY"."DATEOFSALE" >= DATE '2016-01-01'
GROUP BY "COMPANY"."ID"
ORDER BY PriceSum DESC;
我只想显示最畅销公司的ID和总销售额。
短暂性脑缺血发作
这是在Oracle中,所以我不能便宜地使用LIMIT 1。您可以使用子查询:
SELECT c.*
FROM (SELECT "COMPANY"."ID", SUM("COMPANY"."PRICE") As PriceSum
FROM "COMPANY"
WHERE "COMPANY"."DATEOFSALE" >= DATE '2016-01-01'
GROUP BY "COMPANY"."ID"
ORDER BY PriceSum DESC
) c
WHERE rownum = 1;
在Oracle 12c+中,您可以使用仅获取前1行
,而不使用子查询。这是ANSI标准中相当于限制的标准
编辑:
如果您希望所有公司都具有最大值,请使用rank()
或densite\u rank()
:
您可以将RANK()
替换为ROW\u NUMBER()
,也可以得到前面的结果。您可以使用rownum,但是如果两个或更多的人并列第一呢?这就是为什么我说这将是一个廉价的解决方案,呵呵。这比我所拥有的要好,谢谢。唯一的问题是当两个或两个以上的公司有相同的销售额,这也是最大的。在这种情况下,它不会返回全部,只返回一个,半随机的:D
SELECT c.*
FROM (SELECT "COMPANY"."ID", SUM("COMPANY"."PRICE") As PriceSum,
RANK() OVER (ORDER BY SUM("COMPANY"."PRICE") DESC) as seqnum
FROM "COMPANY"
WHERE "COMPANY"."DATEOFSALE" >= DATE '2016-01-01'
GROUP BY "COMPANY"."ID"
ORDER BY PriceSum DESC
) c
WHERE seqnum = 1;