mysql - 为什么我的sql用了Max函数却不能用Abs函数?

标签 mysql sql ms-access vba

我有一个表 [tblFull1 04WoodsideTransportV335],所有数据都来自该表。我想获得压力为最大值、最小值或绝对值的 [数据位置] 和 [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;

最佳答案

在 SQL 中,在“HAVING”语句中,只能使用“GROUP BY”中定义的列。对于其他列,您必须在聚合函数中使用 then,它们是: - AVG() - 返回平均值 - COUNT() - 返回行数 - FIRST() - 返回第一个值 - LAST() - 返回最后一个值 - MAX() - 返回最大值 - MIN() - 返回最小值 - SUM() - 返回总和

关于mysql - 为什么我的sql用了Max函数却不能用Abs函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18011507/

相关文章:

Android - 如何查看在我的应用程序中创建的 sql 数据库?我在 Eclipse 的 Android 模拟器上运行它

c# - 从 2 个表中 SELECT 到 dataGridView 时出现 GROUP BY 问题

sql - IIS 和 SQL 可以在同一个 Azure 虚拟机上运行吗?

sql-server-2008 - Access 查询运行缓慢

sql - 如何找到表列数据中最长的字符串

mysql - SQL 连接同时具有一对一和一对多关系的表

mysql - 在 MySQL 中仅显示完全唯一的结果

php - MySQL:从日期属于当前周和当前月的表中选择数据

sql - 如何从sql中的多表中删除一行?

java - 查询数据库并以 Json 格式返回结果的通用 Java 方法