2

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

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

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

4

5 回答 5

4

如果没有数据库平台,我们不能说那么多,但试试这个:

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

我认为实际答案可以在文档中找到,您可以在其中找到TOP确实是关键字,并且表格用".

尝试这个:

SELECT WSN
,      MIN("TOP") - MAX(BASE)
FROM   PERFS
GROUP
BY     WSN
于 2014-02-24T16:17:32.853 回答
2

我在 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

感谢所有的帮助家伙。

于 2014-02-26T16:33:53.273 回答
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

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

于 2014-02-24T16:18:47.507 回答
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
于 2014-02-24T16:22:31.750 回答
0
select MAX(population) - MIN(population) as value from city;

查询是从 city 表中的人口中找到 max - min

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

于 2019-08-15T17:14:29.233 回答