群组功能的问题
Issues with Group functions
我正在研究我无法想出解决方案的实验室问题,这将使我能够找出拥有不止一位作者的书籍(请参阅下面发布的问题以了解我的评论是否有意义) .我脑子里一片空白。我的单词问题很糟糕。我知道我必须做一个我已经完成的 JOIN 语句,我知道我必须使用 COUNT 函数来计算作者的数量,但老实说我不知道我将如何只计算有2 位作者。
如有任何意见,我们将不胜感激。我试着把它分解成几个步骤,但我只是没有抓住那一部分。
- 在您的架构中使用正确的 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;
我正在研究我无法想出解决方案的实验室问题,这将使我能够找出拥有不止一位作者的书籍(请参阅下面发布的问题以了解我的评论是否有意义) .我脑子里一片空白。我的单词问题很糟糕。我知道我必须做一个我已经完成的 JOIN 语句,我知道我必须使用 COUNT 函数来计算作者的数量,但老实说我不知道我将如何只计算有2 位作者。
如有任何意见,我们将不胜感激。我试着把它分解成几个步骤,但我只是没有抓住那一部分。
- 在您的架构中使用正确的 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;