这些是我的表格,我正在努力制定查询以执行以下操作:
对于拥有多位作者的每位发布商,请获取他们销售的图书的发布商名称,位置和平均费用。
我在想我需要一个SELECT COUNT(authorName),但我对两个查询的JOIN有什么帮助感到茫然?
编辑:
SELECT publisherName, COUNT(authorName) AS noAuthors FROM Book GROUP BY publisherName;
每个发布商都会返回我的authorCount,只是现在加入
答案 0 :(得分:0)
SELECT publisherName, COUNT( DISTINCT authorName ) AS noAuthors, Publisher.location, AVG( Book.Cost ) AS avgCost
FROM Book
INNER JOIN Publisher ON Publisher.name = publisherName
GROUP BY publisherName
HAVING COUNT( DISTINCT authorName ) >1;
最终想出来,可能是优化的方法,但它有效!
创建:
答案 1 :(得分:0)
select b.publishername,
p.location,
count(distinct b.authorname) as noauthors,
avg(b.cost) as avg_cost
from book b
join publisher p
on b.publishername = p.name
group by b.publishername, p.location
having count(distinct b.authorname) > 1
需要指出的一点: 你必须统计不同的作者,计数(authorname)> 1可能包括拥有2本以上同一作者的书籍但没有其他作者的书籍的出版商。以上内容将结果限制在拥有2位或更多独特作者的书籍的出版商中,这是您所希望的,在您的问题中。
<强>小提琴:强>
http://sqlfiddle.com/#!9/45019/1/0
<强>输出:强>
| PUBLISHERNAME | LOCATION | NOAUTHORS | AVG_COST |
|---------------|----------|-----------|----------|
| TechBooks | London | 2 | 32.5 |
请注意BudgetBooks的排除方式。他们有2本书,但两者都是同一作者。如果你没有做一个明确的计数,它们将被错误地包括在内。