1

我的代码如下:

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 编写的,但是我怎样才能使它成为一个合法的函数呢?

4

2 回答 2

10

对于几乎每个 DBMS(MySQL 是我知道的唯一例外,但可能还有其他例外), aSELECT中未聚合的每一列都需要在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;  
于 2013-03-29T20:26:23.600 回答
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

于 2013-03-29T20:27:28.003 回答