2017-04-11 240 views
0

我得到了这个说法GROUP BY SQL语句错误

SELECT ITEM.ITEMID, ITEMNAME, QUANTITY AS "QUANTITY SOLD" 
FROM ORDERITEM, 
    NBUSER."ORDER", 
    PAYMENT, 
    ITEM 
WHERE NBUSER."ORDER".PAYMENTID = PAYMENT.PAYMENTID 
    AND ITEM.ITEMID = ORDERITEM.ITEMID 
    AND PAYMENT.PAYMENTDATE BETWEEN '4/1/2017' AND '4/30/2017' 
GROUP BY ITEM.ITEMID 
ORDER BY ITEM.ITEMID DESC; 

但它不断给我这个错误:

[Exception, Error code 30,000, SQLState 42Y36] Column reference 'ITEM.ITEMNAME' is invalid, or is part of an invalid expression. For a SELECT list with a GROUP BY, the columns and expressions being selected may only contain valid grouping expressions and valid aggregate expressions. Line 1, column 1

我想加入类似的itemid记录在一起,并添加量弥补所有相同的itemid。

+2

一般的GROUP BY规则说:如果指定了GROUP BY子句,SELECT列表中的每个列引用必须标识一个分组列或者是一个set函数的参数。 – jarlh

+2

错误是自我解释读取它。您应该将选择列表列添加到group by子句中或使用聚合函数。 – Sankar

+1

今天提示:切换到现代,明确的JOIN语法。易于编写(没有错误),更易于阅读(和维护),并且在需要时更容易转换为外部联接。 – jarlh

回答

2
  1. 首先,您在语句中有4个表格,但只有2个连接。 你有意这样做吗?如果不是,则需要指定另外1个连接。

  2. 当您选择列的一部分使用组只,您必须对SELECT子句中的其余列,在你的情况下,例如聚合函数:


select ITEM.ITEMID, max(ITEMNAME), sum(QUANTITY) AS "QUANTITY SOLD" ... 
  1. 最好为每列使用表别名,否则,一般来说很难理解sql语句。 您在此处定义了别名 - ITEM.ITEMIDITEM是别名),但不存在 - ITEMNAME
+0

谢谢你的回复,我忘了加入另外2张桌子.. –