我只是想在类似的表达式中使用min()和max()函数:
SELECT WSN, MIN(TOP) - MAX(BASE) FROM PERFS GROUP BY WSN
但这似乎不是有效的SQL。我不断被告知我不能在表达式中使用聚合函数。我可以得到一些帮助吗?
答案 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-是变量名,可以将其更改为任何