首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Group by/aggregate错误- SQL

Group by/aggregate错误- SQL
EN

Stack Overflow用户
提问于 2017-02-15 23:53:28
回答 5查看 3.3K关注 0票数 0

我在这个查询中使用的SQL如下:

代码语言:javascript
复制
SELECT p.publisherID, p.publisherName, month(o.orderDate), sum(ol.quantity)
FROM Orders o, orderLine ol, Publisher p, Book b
WHERE ol.orderNum = o.orderNum
And ol.isbn is not null
And b.isbn=ol.isbn
And p.publisherID=b.publisherID
Group By p.publisherID, p.publisherName;

我得到了这个错误:

代码语言:javascript
复制
Msg 8120, Level 16, State 1, Line 1
Column 'Orders.orderDate' is invalid in the select list because it is not
contained in either an aggregate function or the GROUP BY clause.

现在您可以看到,orderDate列实际上在一个函数中,但是为什么我仍然会得到这个错误?我能想到的惟一一件事是,当我将鼠标悬停在month()函数上时,它会显示(表达式datetime),而orderDate只是一个"date“数据类型。我不知道这是不是问题所在。

EN

回答 5

Stack Overflow用户

发布于 2017-02-16 00:03:09

代码语言:javascript
复制
SELECT p.publisherID, p.publisherName, month(o.orderDate), sum(ol.quantity)
FROM Orders o, orderLine ol, Publisher p, Book b
WHERE ol.orderNum = o.orderNum
And ol.isbn is not null
And b.isbn=ol.isbn
And p.publisherID=b.publisherID
Group By p.publisherID, p.publisherName, month(o.orderDate);

这将返回

代码语言:javascript
复制
+-----+------+-------+-------+
| 1   |Bookco|January| 12    |
| 1   |Bookco|Febuary| 6     |
| 2   |NextBk|January| 2     |
+-----+------+-------+-------+

如果没有组中的订单日期,编译器就不知道如何处理每个出版商的各种月份。

票数 3
EN

Stack Overflow用户

发布于 2017-02-17 12:40:44

Group BY子句的一些规则:

  1. 带有group by子句的查询的选择列表中只允许有、

代码语言:javascript
复制
- Expressions in Group BY
- Aggregate Functions (SUM, COUNT, MAX, Min, AVG)

group by子句中的

  1. 表达式不需要包含在select语句

正如其他人所解释的,Month不是一个聚合函数,而是一个标量函数。

票数 1
EN

Stack Overflow用户

发布于 2017-02-16 00:00:53

正如错误所述,您必须在Group By列表中添加Orders.orderDate

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

https://stackoverflow.com/questions/42254074

复制
相关文章

相似问题

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