Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中获得销售总额的最大值?_Sql_Oracle - Fatal编程技术网

如何在SQL中获得销售总额的最大值?

如何在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

我有一个简单的任务,但我卡住了,我有一个表,需要打印出最大总销售额的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和总销售额。 短暂性脑缺血发作


这是在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;