例如,我有这个
select a.f1, b.f1, greatest(a.f2 - sum(b.f2)) as qty ...
那么,我该如何使用sum(b.f2)?如何通过字段sum()
从表b
中获得b.f2
行并在表达式greatest(a.f2 - sum(b.f2))
中求值?
select t1.gid,
greatest((t1.qty - sum(t2.qty) - t1.otherqty - t1.anotherqty), 0) as QTY,
from bigtable t1
inner join ambigioustable t2 on t2.gid = t1.gid
group by
t1.gid,
t1.qty,
t1.otherqty,
t1.anotherqty,
order by t1.gid;
我希望这个查询能对像这样的条目进行计算
---|gid|---|qty|--|label|---
1 20 some item
1 2 some item
1 3 some item
2 4 som another item
...
等
我对吗?
答案 0 :(得分:1)
Oracle中的GREATEST
函数主要是一个标量函数,这意味着它通常以单行作为输入标量值,并返回最大值。如果我正确阅读了您的问题,则希望找到与f2
字段值之间的最大差异对应的一行。这需要对整个表/结果集进行计算。这样的事情应该起作用:
SELECT a_f1, b_f1, diff
FROM
(
SELECT a.f1 AS a_f1, b.f1 AS b_f1, a.f2 - b.f1 AS diff,
ROW_NUMBER() OVER (ORDER BY a.f2 - b.f2 DESC) AS rn
FROM tableA a
INNER JOIN tableB b
ON a.id = b.id
) t
WHERE rn = 1;
注意:如果您不在乎差异的方向,则可以在对ORDER BY (ABS(a.f2 - b.f2))
的调用中使用ROW_NUMBER
。