SQL如何根据多行中的值选择行

Posted

技术标签:

【中文标题】SQL如何根据多行中的值选择行【英文标题】:SQL How to select rows based on values from multiple rows 【发布时间】:2021-03-22 09:32:54 【问题描述】:

您好,我遇到了以下表格的问题

       CREATE TABLE BOOKS ( 
          Title varchar(255),
          Year INT,
          Type ENUM("Horror", "Fantasy"),
          Pages INT,
          PRIMARY KEY (Title, Year)
        );
        
        CREATE TABLE AUTHORS(
          Title varchar(255), 
          Year INT, 
          PlaceOfBirth varchar(255), 
          AuthorName varchar(255),
          PRIMARY KEY (Title, Year, PlaceOfBirth ),
          FOREIGN KEY (Title, Year) REFERENCES BOOKS(Title, Year)
        );

现在我想查询所有只有 40 页及以上恐怖书的作者。

SELECT a.AuthorName, b.Pages FROM AUTHORS a INNER JOIN BOOKS b ON a.Title=b.Title AND a.Year=b.Year
WHERE  b.Type="Horror" AND b.Pages > 40

问题是现在我得到了那些写过 40 页以上的恐怖书的作者,但他们也可能有不到 40 页的恐怖书。我想要那些只写 40 页或更长的恐怖书的作者。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我正在考虑,但是当我尝试它时 mysql 抛出一个错误 SELECT 列表的表达式 #2 不在 GROUP BY 子句中并且包含非聚合列

以上是关于SQL如何根据多行中的值选择行的主要内容,如果未能解决你的问题,请参考以下文章

sql 将多行显示为一行,如果一张表中有几行数据中的同一列的值是相同,那么只显示为一行的数据

sql如何选择行=值的多行计数

根据在 cakephp 中选择的值向数据库添加多行

如何使用 pl/sql 为多行填充相同的值

EasyUI datagrid 如何默认选择多行

如何根据一个字段是不是包含oracle sql中的逗号分隔字符串将单行拆分为多行?