我的代码如下:
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,但如何使之成为一个合法的功能?
对于几乎每一个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;
如果你必须保持你的GROUP BY
完好无损( 不添加非agreggated字段列表),那么你需要决定哪些值你将要为OrderLine.OrdID
和OrdDate
。 例如,你可以选择有MAX
或MIN
这些值的。
因此,它是既可以作为伯尼建议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?