组功能的问题

时间:2015-02-14 15:12:38

标签: sql aggregate-functions sqlplus

我正在研究实验室问题,我无法提出解决方案,这样我就可以找出拥有多一位作者的书籍(请参阅下面发布的问题,以便我的意见有意义)。我的想法完全是空白的。我对单词问题非常不满意。我知道我必须做一个我已经完成的JOIN声明,我知道我必须使用COUNT函数来计算作者的数量,但老实说我不知道​​如何只计算有的书籍2位作者。

任何输入都将不胜感激。我试图把它分解成几个步骤,但这只是我脑子里没有抓住的一部分。

  1. 使用模式中的正确表格,使用您希望列出书名的连接操作和由多个作者编写的所有书籍的作者数创建查询。为标题栏提供“书名”的别名,以及显示作者数量的列,作为“作者数量”的别名。
  2. BOOKS表和AUTHOR表由BOOK_AUTHOR表通过BOOKS中的BOOKID和AUTHOR中的AUTHORID连接。

    我想我开始明白我必须用一个数学方程来找出一个以上的作者。我不太了解HAVING功能,所以我将对此进行更多的研究。

2 个答案:

答案 0 :(得分:1)

你是对的,你需要一个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;

确保将表名和列调整到正确的名称和列,因为您没有发布它们。

请注意,如果图书的作者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;

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

答案 1 :(得分:0)

我终于在你的帮助下找到了答案。请参阅以下内容:

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;