群组功能的问题

Issues with Group functions

我正在研究我无法想出解决方案的实验室问题,这将使我能够找出拥有不止一位作者的书籍(请参阅下面发布的问题以了解我的评论是否有意义) .我脑子里一片空白。我的单词问题很糟糕。我知道我必须做一个我已经完成的 JOIN 语句,我知道我必须使用 COUNT 函数来计算作者的数量,但老实说我不知道​​我将如何只计算有2 位作者。

如有任何意见,我们将不胜感激。我试着把它分解成几个步骤,但我只是没有抓住那一部分。

  1. 在您的架构中使用正确的 tables,使用您希望的任一联接操作创建一个查询,该查询将列出由一位以上作者撰写的所有书籍的书名和作者数量。为标题列指定别名 "Book Title",为显示作者数量的列指定别名 "Number of Authors".

有一本书 table 和一个作者 table 由 BOOK_AUTHOR table 通过他们在 BOOKS 中的 BOOKID 和 AUTHOR 中的 AUTHORID 连接。

我想我开始明白我必须使用数学方程式来计算不止一个作者。我不太了解 HAVING 函数,因此我将对此进行更多研究。

你是对的,你需要一个 JOIN、一个 COUNT,还需要一个 HAVING 来确保有不止一个作者写了这本书:

select title as 'Book Title', count(authors) as 'Number of Authors'
from books
join authors on books.id = authors.book_id
having count(authors) > 1
group by authors;

确保将 table 名称和列调整为正确的,因为您没有 post 它们。

注意,如果图书的author id列与作者id重名,可以使用USING关键字加入。那么您的查询将变为

select title as 'Book Title', count(authors) as 'Number of Authors'
from books
join authors on using(book_id)
having count(authors) > 1
group by authors;

请注意,如果您只想 select 专门有 2 位作者的书籍,您可以将 having 子句更改为 having count(authors) = 2。但是即使你在你的问题中提出这个要求,根据你粘贴的练习,你也没有正确理解这个问题。

在你的帮助下,我终于找到了答案。请看下面:

SELECT DISTINCT Title "Book Title", COUNT(*)"Number of Authors"
FROM BOOKS JOIN
BOOK_AUTHOR ON
BOOKS.BookId = BOOK_AUTHOR.BookId
JOIN AUTHOR ON
BOOK_AUTHOR.AuthorId = Author.AuthorId
GROUP BY Title
HAVING COUNT(*) > 1;