我得到:“您尝试执行的查询不包含指定表达式'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.OrdID
和OrdDate
。例如,您可以选择这些值中的MAX
或MIN
。
所以它是 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'作为聚合函数的一部分。我该如何绕过?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我得到一个 nullPointerException? [复制]