SQL减去Min和Max

时间:2014-02-24 16:14:25

标签: sql dbisam

我只是想在类似的表达式中使用min()和max()函数:

SELECT WSN, MIN(TOP) - MAX(BASE) FROM PERFS GROUP BY WSN 

但这似乎不是有效的SQL。我不断被告知我不能在表达式中使用聚合函数。我可以得到一些帮助吗?

5 个答案:

答案 0 :(得分:4)

没有数据库平台,我们无法说清楚,但试试这个:

select wsn, top - base
from
( SELECT WSN
  ,      MIN(TOP) top
  ,      MAX(BASE) base
  FROM   PERFS
  GROUP
  BY     WSN
)

我认为可以在documentation中找到实际答案,您可以在其中找到TOP确实是关键字,并使用"转义表。

试试这个:

SELECT WSN
,      MIN("TOP") - MAX(BASE)
FROM   PERFS
GROUP
BY     WSN

答案 1 :(得分:1)

最佳答案可能取决于您正在使用的SQL类型,因为常见的表表达式非常方便。我假设TOP和BASE是PERFS表中的字段?

这是我最好的猜测:

SELECT WSN, (select MIN(TOP) FROM PERFS GROUP BY WSN) - (select MAX(BASE) FROM PERFS GROUP BY WSN) FROM PERFS GROUP BY WSN

编辑:帕特里克的答案可能会更好。

答案 2 :(得分:1)

我把这个问题提到了Elevate的DBISAM论坛上(不知道我为什么不开始这样做),这就是他们想出来的:

使用两遍并创建一个内存表。

SELECT WSN, MAX(BASE) as MaxBase, MIN(TOP) as MinTop INTO memory FirstPass FROM PERFS GROUP BY WSN
;
SELECT (MaxBase - MinTop) as Calc FROM memory FirstPass

感谢所有帮助人员。

答案 3 :(得分:0)

这适用于我使用Oracle。您使用的DBMS是什么?

下面的语句创建了一个可以查询的示例内联表。我在这里提供了可以按原样运行的示例代码(自包含)。您必须调整它以匹配您自己的数据库模式:

WITH TEST_DATA AS (
  SELECT 'ted' AS name, 1 as val FROM DUAL UNION ALL 
  SELECT 'ted' AS name, 2 as val FROM DUAL UNION ALL 
  SELECT 'ted' AS name, 3 as val FROM DUAL UNION ALL 
  SELECT 'sam' AS name, 5 as val FROM DUAL UNION ALL 
  SELECT 'sam' AS name, 10 as val FROM DUAL
)SELECT name, MIN(val) - MAX(val) as minmax
 FROM TEST_DATA
GROUP BY name

答案 4 :(得分:0)

select MAX(population) - MIN(population) as value from city;

查询要从城市表中的人口中找到最大值-最小值

value-是变量名,可以将其更改为任何