我得到:“您尝试执行的查询不包含指定表达式'OrdID'作为聚合函数的一部分。我该如何绕过?

Posted

技术标签:

【中文标题】我得到:“您尝试执行的查询不包含指定表达式\'OrdID\'作为聚合函数的一部分。我该如何绕过?【英文标题】:I am getting: "You tried to execute a query that does not include the specified expression 'OrdID' as part of an aggregate function. How do I bypass?我得到:“您尝试执行的查询不包含指定表达式'OrdID'作为聚合函数的一部分。我该如何绕过? 【发布时间】:2013-03-29 20:14:09 【问题描述】:

我的代码如下:

SELECT Last, OrderLine.OrdID, OrdDate, SUM(Price*Qty)  AS total_price
    FROM ((Cus INNER JOIN Orders ON Cus.CID=Orders.CID)
        INNER JOIN OrderLine
            ON Orders.OrdID=OrderLine.OrdID)
        INNER JOIN ProdFabric
            ON OrderLine.PrID=ProdFabric.PrID   
            AND OrderLine.Fabric=ProdFabric.Fabric  
    GROUP BY Last  
    ORDER BY Last DESC, OrderLine.OrdID DESC;  

此代码之前已回答过,但含糊其辞。我想知道我哪里出错了。

您尝试执行的查询不包含指定表达式“OrdID”作为聚合函数的一部分。

是我不断收到的错误消息,无论我更改什么,它都会给我这个错误。是的,我知道,它是用 SQL-92 编写的,但是我怎样才能使它成为一个合法的函数呢?

【问题讨论】:

你需要group by每个非聚合列...任何基本的 SQL 教程都可以告诉你这一点以及更多。 这可以在 mysql 中使用吗? 【参考方案1】:

对于几乎所有 DBMS(MySQL 是我知道的唯一例外,但可能还有其他例外),SELECT 中未聚合的每一列都需要在 GROUP BY 子句中。对于您的查询,除了SUM() 中的列之外的所有内容:

SELECT Last, OrderLine.OrdID, OrdDate, SUM(Price*Qty)  AS total_price
...   
GROUP BY Last, OrderLine.OrdID, OrdDate  
ORDER BY Last DESC, OrderLine.OrdID DESC;  

【讨论】:

关于这一点,它现在告诉我 OrdID 可以引用多个表。我要把头发扯掉!!!!!!!!!! 对不起。我有一个错字(, 而不是.)。请参阅我编辑的 GROUP BY 声明。 (你真的应该学习一个教程或购买一本关于 SQL 的书;你应该能够自己发现这一点。):-) 哈哈,我不骗你,我是个流浪汉,一直点击我没有关闭的旧查询。【参考方案2】:

如果您必须保持 GROUP BY 完整(并且将非聚合字段添加到列表中),那么您需要决定需要哪些值对于OrderLine.OrdIDOrdDate。例如,您可以选择这些值中的MAXMIN

所以它是 bernie 建议的 GROUP BY Last, OrderLine.OrdID, OrdDate 或类似的东西(如果它对您的业务逻辑有意义的话):

SELECT Last, MAX(OrderLine.OrdID), MAX(OrdDate), SUM(Price*Qty) AS total_price

【讨论】:

我试过了,但我需要至少 4 个结果(我的 4 个订单 ID)和一个订单总数 @user2225611 - 您是说您需要在每一行显示具有相同总价的个人 ID?

以上是关于我得到:“您尝试执行的查询不包含指定表达式'OrdID'作为聚合函数的一部分。我该如何绕过?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我得到分段(核心转储)?

没有从服务器得到任何响应,但能够从 telnet 得到响应

为啥我得到一个 nullPointerException? [复制]

百度地图中如何由输入的信息得到所在城市,由我输入的地点,得到我所在的城市,百度API有方法吗

为啥我不能从数组中得到正确的日期?

不知道我从哪里得到 NoSuchMethodError: '[]'