我越来越:\“试图执行一个查询,不包括指定表达式‘OrdID’作为一个聚合函数的一部分怎样忽略?(I

2019-08-18 06:38发布

我的代码如下:

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,但如何使之成为一个合法的功能?

Answer 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;  


Answer 2:

如果你必须保持你的GROUP BY完好无损( 添加非agreggated字段列表),那么你需要决定哪些值你将要为OrderLine.OrdIDOrdDate 。 例如,你可以选择有MAXMIN这些值的。

因此,它是既可以作为伯尼建议GROUP BY Last, OrderLine.OrdID, OrdDate或者是这样的(如果是有意义的,你的业务逻辑):

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



文章来源: 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?