Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Oracle 如何检查最低数值列(PL SQL)_Oracle_Function_Plsql - Fatal编程技术网

Oracle 如何检查最低数值列(PL SQL)

Oracle 如何检查最低数值列(PL SQL),oracle,function,plsql,Oracle,Function,Plsql,返回总购车量最大的邮政编码。由于可能有两个或更多邮政编码的平局,请确保返回最低的数字邮政编码 表架构: 问题是max可以返回多个值,我只想返回1个值,其中数字邮政编码最低。我怎样才能做到这一点呢?忘掉我以前关于Ceil和Floor的帖子吧。他们在这里帮不上忙 您可以尝试使用另一个select,该select通过使用最大值查询来确定最小值(%value%) 可能是这样(未经测试): 一个简单的选择是按两个维度进行字典排序,首先按基于邮政编码的计数降序排序,然后按邮政编码递增排序 SELECT z

返回总购车量最大的邮政编码。由于可能有两个或更多邮政编码的平局,请确保返回最低的数字邮政编码

表架构:


问题是max可以返回多个值,我只想返回1个值,其中数字邮政编码最低。我怎样才能做到这一点呢?

忘掉我以前关于
Ceil
Floor
的帖子吧。他们在这里帮不上忙

您可以尝试使用另一个select,该select通过使用最大值查询来确定最小值(%value%)

可能是这样(未经测试):


一个简单的选择是按两个维度进行字典排序,首先按基于邮政编码的计数降序排序,然后按邮政编码递增排序

SELECT z.tp
     , z.zip 
  INTO total
     , minzip
  FROM (
            SELECT y."Total purchases"    tp
                 , y.zip                  zip
              FROM (
                      SELECT     count(c.zip) AS "Total purchases"
                               , c.zip
                      FROM       customers c
                      inner join sales s
                      ON         c.cust_id=s.cust_id
                      inner join vehicles v
                      ON         s.vin=v.vin
                      GROUP BY   c.zip,
                                 v.make
                   ) y
          ORDER BY y."Total purchases" DESC
                 , y.zip               ASC
       ) z
 WHERE ROWNUM = 1              
     ;

您还可以使用分析函数对行进行排序并获得第一行

如果您希望每个其他维度(例如每个销售人员)的极端行数,则此方法可以很好地扩展-只需在
行数
函数中添加
分区

with your_query as (
   ....
),
ordered_query as (
  select "Total purchases", zip,
  row_number() over (order by "Total purchases" desc, zip) as rn
  from your_query
)
select "Total purchases", zip
from ordered_query
where rn = 1

从(您的子查询)中选择*,其中ROWNUM=1我希望邮政编码具有最小数值,而不是“Total Purchases”@Zainulabdeen,这可能是因为您在原始代码中有
[Total Purchases]
。您还可以通过
v.make
@Zainulabdeen进行分组。我删除了一个虚假的右括号,并更正了非标准标识符的语法。一个精简版(当然有不同的表格)适合我(在11g2上)。你能发布你的工作吗?当然是你的桌子
SELECT z.tp
     , z.zip 
  INTO total
     , minzip
  FROM (
            SELECT y."Total purchases"    tp
                 , y.zip                  zip
              FROM (
                      SELECT     count(c.zip) AS "Total purchases"
                               , c.zip
                      FROM       customers c
                      inner join sales s
                      ON         c.cust_id=s.cust_id
                      inner join vehicles v
                      ON         s.vin=v.vin
                      GROUP BY   c.zip,
                                 v.make
                   ) y
          ORDER BY y."Total purchases" DESC
                 , y.zip               ASC
       ) z
 WHERE ROWNUM = 1              
     ;
with your_query as (
   ....
),
ordered_query as (
  select "Total purchases", zip,
  row_number() over (order by "Total purchases" desc, zip) as rn
  from your_query
)
select "Total purchases", zip
from ordered_query
where rn = 1