查询作者>的每个发布者1

时间:2014-08-24 13:44:22

标签: mysql sql

enter image description here

这些是我的表格,我正在努力制定查询以执行以下操作:

对于拥有多位作者的每位发布商,请获取他们销售的图书的发布商名称,位置和平均费用。

我在想我需要一个SELECT COUNT(authorName),但我对两个查询的JOIN有什么帮助感到茫然?

编辑:

SELECT publisherName, COUNT(authorName) AS noAuthors FROM Book GROUP BY publisherName;

每个发布商都会返回我的authorCount,只是现在加入

2 个答案:

答案 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;

最终想出来,可能是优化的方法,但它有效!

创建:

http://share.joescott.me/9930e4.png

答案 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本书,但两者都是同一作者。如果你没有做一个明确的计数,它们将被错误地包括在内。