为啥我的 sql 和 Max 函数一起工作时,却不能和 Abs 函数一起工作?
Posted
技术标签:
【中文标题】为啥我的 sql 和 Max 函数一起工作时,却不能和 Abs 函数一起工作?【英文标题】:Why does my sql not work with the Abs function when it works with the Max function?为什么我的 sql 和 Max 函数一起工作时,却不能和 Abs 函数一起工作? 【发布时间】:2013-08-02 07:47:42 【问题描述】:我有一张表 [tblFull1 04WoodsideTransportV335],所有数据都来自该表。我想获得应力为 Max、Min 或 Abs 的 [Data Location] 和 [load_case]。它适用于 Max 和 Min。 但由于某种原因,它不适用于 Abs。它在 ms Access 2013 中运行。我使用 vba 以编程方式生成查询。
Abs 和 max、min 运算符之间有什么区别导致它不起作用吗?
当 Abs 查询运行时,由于某种原因它会宣传“As Expr1”,为什么要这样做?
我知道 SQL 看起来很糟糕,但它可以工作。如果您对如何改进它有任何建议,请告诉我。
对不起,我的英语不好,我是挪威人。
带有 MAX 函数的 SQL:
SELECT DISTINCT
t1.[load_case], t2.[Data Location] AS Nodenr,
t2.[MaxOfHoop Stress N/mm^2]
FROM
[tblFull1 04WoodsideTransportV335] AS t1,
(SELECT
[tblFull1 04WoodsideTransportV335].[Data Location],
MAX([tblFull1 04WoodsideTransportV335].[Hoop Stress N/mm^2]) AS [MaxOfHoop Stress N/mm^2]
FROM
[tblFull1 04WoodsideTransportV335]
GROUP BY
[tblFull1 04WoodsideTransportV335].[Data Location]
HAVING ((([tblFull1 04WoodsideTransportV335].[Data Location])
In (SELECT [Data Location]
FROM [tblFull1 04WoodsideTransportV335]
GROUP BY [Data Location]
HAVING Count(*) > 1))
AND ((MAX([tblFull1 04WoodsideTransportV335].[Hoop Stress N/mm^2])) Is Not Null))
ORDER BY
[tblFull1 04WoodsideTransportV335].[Data Location]) AS t2
WHERE
((t1.[Hoop Stress N/mm^2]) = [t2].[MaxOfHoop Stress N/mm^2])
ORDER BY
t1.[load_case] DESC;
带 Abs 函数的 SQL:
SELECT DISTINCT
t1.load_case, t2.[Data Location] AS Nodenr,
t2.[AbsOfHoop Stress N/mm^2] AS Expr1
FROM
[tblFull1 04WoodsideTransportV335] AS t1,
(SELECT
[tblFull1 04WoodsideTransportV335].[Data Location],
ABS([tblFull1 04WoodsideTransportV335].[Hoop Stress N/mm^2]) AS[AbsOfHoop Stress N/mm^2]
FROM [tblFull1 04WoodsideTransportV335]
GROUP BY [tblFull1 04WoodsideTransportV335].[Data Location]
HAVING ((([tblFull1 04WoodsideTransportV335].[Data Location])
In (SELECT [Data Location]
FROM [tblFull1 04WoodsideTransportV335]
GROUP BY [Data Location]
HAVING Count(*) > 1))
AND ((ABS([tblFull1 04WoodsideTransportV335].[Hoop Stress N/mm^2])) Is Not Null))
ORDER BY
[tblFull1 04WoodsideTransportV335].[Data Location]) AS t2
WHERE
(((t1.[Hoop Stress N/mm^2])=[t2].[AbsOfHoop Stress N/mm^2]))
ORDER BY
t1.load_case DESC;
【问题讨论】:
Abs 不是分组函数,Abs(1,2,3,4,5) 没有意义,而 max(1,2,3,4,5) = 5 当您的组(每个Data Location
)具有多个环向应力值时,您要返回哪个abs()
?
【参考方案1】:
在 SQL 中,在“HAVING”语句中,您只能使用“GROUP BY”中定义的列。对于其他列,您必须在聚合函数中使用 then,它们是: - AVG() - 返回平均值 - COUNT() - 返回行数 - FIRST() - 返回第一个值 - LAST() - 返回最后一个值 - MAX() - 返回最大值 - MIN() - 返回最小值 - SUM() - 返回总和
【讨论】:
啊哈,现在我明白了(谢谢!)。我希望我可以像使用 Max 和 Min 一样使用 Abs 函数。你知道这个问题有什么简单的解决方法吗?=)以上是关于为啥我的 sql 和 Max 函数一起工作时,却不能和 Abs 函数一起工作?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的mysql导入sql文件很慢,3000多条的insert语句都要5分钟,我朋友电脑却不超
内部类和公共构造函数 - 为啥它与 Activator.CreateInstance 一起工作?
在 SELECT 语句中使用自定义函数时,为啥我的 SQL 查询的输出显示不正确?