SQL如何基于多行中的值选择行

SQL如何基于多行中的值选择行,sql,select,inner-join,aggregate-functions,having-clause,Sql,Select,Inner Join,Aggregate Functions,Having Clause,嗨,我遇到了关于下表的问题 创建桌面书 标题varchar255, 整年, 恐怖,幻想, 整版, 主键标题,年份 ; 创建表作者 标题varchar255, 整年, 出生地点varchar255, AuthorName varchar255, 主键名称、年份、出生地点、, 外键标题,年份,年份 ; 现在我想询问所有只有40页或更多恐怖书的作者 选择a.AuthorName,b.Pages FROM AUTHORS a internal JOIN BOOKS b ON a.Title=b.Titl

嗨,我遇到了关于下表的问题

创建桌面书 标题varchar255, 整年, 恐怖,幻想, 整版, 主键标题,年份 ; 创建表作者 标题varchar255, 整年, 出生地点varchar255, AuthorName varchar255, 主键名称、年份、出生地点、, 外键标题,年份,年份 ; 现在我想询问所有只有40页或更多恐怖书的作者

选择a.AuthorName,b.Pages FROM AUTHORS a internal JOIN BOOKS b ON a.Title=b.Title和a.Year=b.Year 其中b.Type=恐怖,b.Pages>40
现在的问题是,我得到了那些写了40多页恐怖书的作者,但他们也可能有不到40页的恐怖书。我想要那些只写了40页或更长的恐怖书的作者。

如果你想要写过至少一本恐怖书并且所有这些书都超过40页的作者的名字,你可以使用group by和having:


我考虑过,但是mysql在我尝试时抛出了一个错误。SELECT list的表达式2不在GROUP BY子句中,并且在mysql 5.6上包含未聚合的columnNevermind。谢谢!
select a.authorname
from authors a 
inner join books b on a.title = b.title and a.year = b.year
where b.type = 'Horror' 
group by a.authorname
having min(b.pages) > 40