这些是我的表,我正在努力制定一个查询来执行以下操作:
对于拥有多名作者的每个出版商,获取出版商的名称、位置以及其销售图书的平均成本。
我想我需要一个 SELECT COUNT(authorName) 但我对两个查询的 JOIN 感到困惑,有什么帮助吗?
编辑:
SELECT publisherName, COUNT(authorName) AS noAuthors FROM Book GROUP BY publisherName;
将返回每个发布者的authorCount,只需立即加入
最佳答案
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
需要指出的是: 您必须计算不同的作者,count(authorname) > 1 可能包括拥有 2 本书以上同一作者的书籍,但没有其他作者的书籍的出版商。上述内容将结果限制为拥有 2 个或更多独特作者的图书的出版商,这正是您在问题中所说的期望。
fiddle :
http://sqlfiddle.com/#!9/45019/1/0
输出:
| PUBLISHERNAME | LOCATION | NOAUTHORS | AVG_COST |
|---------------|----------|-----------|----------|
| TechBooks | London | 2 | 32.5 |
请注意 BudgetBooks 是如何被排除的。他们有两本书,但都是同一作者。如果您没有进行重复计数,它们将被错误地包含在内。
关于mysql - 查询作者 > 1 的每个出版商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472328/