我的代码如下:
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编写的,但是我如何使它成为一个合法的功能呢?
答案 0 :(得分:10)
对于几乎每个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;
答案 1 :(得分: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