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