首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按SQL语句错误分组

按SQL语句错误分组
EN

Stack Overflow用户
提问于 2017-04-11 07:41:41
回答 2查看 1.7K关注 0票数 0

我拿到了这份声明

代码语言:javascript
复制
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;

但它一直让我犯这个错误:

异常、错误代码30,000、SQLState 42Y36列引用“ITEM.ITEMNAME”无效,或者是无效表达式的一部分。对于具有组BY的选择列表,所选列和表达式只能包含有效的分组表达式和有效聚合表达式。第1行,第1栏

我想用类似的itemid加入记录,并将所有相同的itemid的数量相加。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-11 08:01:06

  1. 首先,语句中有4个表,但只有2个联接。你是故意这么做的吗?如果没有,则需要再指定1个联接。
  2. 当只对select中的部分列使用group by时,必须对select子句中的其余列具有聚合函数,例如:
代码语言:javascript
复制
select ITEM.ITEMID, max(ITEMNAME), sum(QUANTITY) AS "QUANTITY SOLD" ...
  1. 最好对每一列使用表别名,否则,通常很难理解sql语句。您已经在这里定义了别名- ITEM.ITEMID (ITEM是别名),但没有定义- ITEMNAME
票数 3
EN

Stack Overflow用户

发布于 2022-09-15 11:05:34

对于将来可能使用另一个DBMS的读者:根据标准版本和供应商,可以允许它在SELECT语句中额外使用列,这些列在功能上仅依赖于分组列。

资料来源: SQL 2008标准草案(链接),第二部分,7.12 ->通用规则第15号:

“如果T是一个分组表,则设G是T的分组列集。在每个<value expression>中,引用T列的每一列引用T的列都应引用函数上依赖于G的某些列C,或者包含在聚合查询为QS的聚合参数中。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43339656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档