想要对所有ID进行分组,但是会收到错误

时间:2014-03-14 10:09:02

标签: sql-server-2008

我今天有点代码盲,因为我正在尝试编写这个简单的查询,应该选择所有的书并显示它们的价格。问题是价格存储在book_sales中,当我使用它时,它将显示书籍已售出的所有时间。因此我想按标识符对它们进行分组,所以我只能看到:

  • BookTitle1 - 99, - - BookID923109

但是现在我看到同一个人一遍又一遍地重复着。

  • BookTitle1 - 99, - BookID923109
  • BookTitle1 - 99, - BookID923109
  • BookTitle1 - 99, - BookID923109

尝试使用此查询解决:

select title,sales_price,identifiers
from BOOKS
INNER JOIN BOOK_SALES
on BOOKS.book_id = BOOK_SALES.book_id
GROUP BY IDENTIFIERS

我得到“[Err] 42000 - [SQL Server]列'BOOKS.TITLE'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”

什么是错误的家伙?

3 个答案:

答案 0 :(得分:2)

问题从您的错误消息中可见一斑。像这样使用GROUP BY

select title,sales_price,identifiers
from BOOKS
INNER JOIN BOOK_SALES
on BOOKS.book_id = BOOK_SALES.book_id
GROUP BY title,sales_price,identifiers

答案 1 :(得分:1)

将您的代码更改为:

select DISTINCT title,sales_price,identifiers
from BOOKS
INNER JOIN BOOK_SALES
on BOOKS.book_id = BOOK_SALES.book_id
GROUP BY IDENTIFIERS, title,sales_price

告诉我它是否有效

答案 2 :(得分:1)

GROUP BY语句与聚合函数结合使用,可以按一列或多列对结果集进行分组。w3schools

在您的查询中,如果您没有汇总数据,则可以使用DISTINCT

select DISTINCT title,sales_price,identifiers
from BOOKS
INNER JOIN BOOK_SALES
on BOOKS.book_id = BOOK_SALES.book_id