【问题标题】:SQL How to select rows based on values from multiple rowsSQL如何根据多行中的值选择行
【发布时间】: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 页或更长的恐怖书的作者。

【问题讨论】:

    标签: sql select inner-join aggregate-functions having-clause


    【解决方案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 子句中并且包含非聚合列
    猜你喜欢
    • 1970-01-01
    • 2023-02-03
    • 2019-10-13
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多