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 は私が認識している唯一の例外ですが、他にもある可能性があります) では、集計されていない a のすべての列を句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;  
于 2013-03-29T20:26:23.600 に答える
2

そのままにしておく必要がある場合GROUP BY(および集計されていないフィールドをリストに追加しない場合)、 および に必要な値を決定する必要がありOrderLine.OrdIDますOrdDate。たとえば、これらの値を持つMAXことを選択できます。MIN

したがって、バーニーが提案したとおりか、次の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 に答える