Mysql 在SQL语句中使用MAX

Mysql 在SQL语句中使用MAX,mysql,sql,Mysql,Sql,我正在尝试学习如何使用SQL提取某些信息。我正在使用PHPMyAdmin for SQL。结构如下: 作者(身份证、名、姓、出生年份、性别、居住城市ID) 图书(ID、名称、类型、出版年份、PublisherID、SoldBookCount) 写入(BookID、AuthorID) 城市(ID、城市名称、国家) 发布者(ID、发布者名称、发布者类型ID) 这里有一些尝试获得不同的信息。我会这样做吗 这是为了让卖书最多的作者看到作者 身份证和售出图书数量 SELECT w.AuthorID, MA

我正在尝试学习如何使用SQL提取某些信息。我正在使用PHPMyAdmin for SQL。结构如下:

作者(身份证、名、姓、出生年份、性别、居住城市ID)

图书(ID、名称、类型、出版年份、PublisherID、SoldBookCount)

写入(BookID、AuthorID)

城市(ID、城市名称、国家)

发布者(ID、发布者名称、发布者类型ID)

这里有一些尝试获得不同的信息。我会这样做吗

这是为了让卖书最多的作者看到作者 身份证和售出图书数量

SELECT w.AuthorID, MAX(b.SoldBookCount)
FROM book as b, writes as w, author as a
WHERE b.ID = w.BookID AND a.ID = w.AuthorID
SELECT w.AuthorID, b.Type, MAX(b.SoldBookCount)
FROM book as b, writes as w, author as a
WHERE b.ID = w.BookID AND a.ID = w.AuthorID
这是为了找到作者和图书类型对,它们的总销量是多少 最大,显示作者ID、图书类型和已售出图书数量

SELECT w.AuthorID, MAX(b.SoldBookCount)
FROM book as b, writes as w, author as a
WHERE b.ID = w.BookID AND a.ID = w.AuthorID
SELECT w.AuthorID, b.Type, MAX(b.SoldBookCount)
FROM book as b, writes as w, author as a
WHERE b.ID = w.BookID AND a.ID = w.AuthorID

这将使用显式的
JOIN
子句获得每个作者/书籍对的售出图书数量。我喜欢将连接条件放入上的
,而不是
的WHERE

SELECT a.ID, b.ID, b.SoldBookCount
FROM author as a
    JOIN writes AS w ON w.AuthorID = a.ID
    JOIN book AS b ON w.BookID = b.ID
您可以使用
groupby
SUM
获得相互销售的图书总数:

SELECT a.ID, SUM(b.SoldBookCount)
FROM author as a
    JOIN writes AS w ON w.AuthorID = a.ID
    JOIN book AS b ON w.BookID = b.ID
GROUP BY a.ID
最后,您还可以使用
orderby
LIMIT

SELECT authorID, totalSoldCount
FROM (
    SELECT a.ID as authorID, SUM(b.SoldBookCount) as totalSoldCount
    FROM author as a
        JOIN writes AS w ON w.AuthorID = a.ID
        JOIN book AS b ON w.BookID = b.ID
    GROUP BY a.ID
) as t
ORDER BY totalSoldCount DESC
LIMIT 1
这里有很多变体。例如,在我放置
SELECT a.ID
的任何地方,您都可以使用
SELECT w.authorID
得到相同的结果

实际上,我认为您可以将最后一个查询作为单个查询进行:

SELECT a.ID as authorID, SUM(b.SoldBookCount) as totalSoldCount
FROM author as a
    JOIN writes AS w ON w.AuthorID = a.ID
    JOIN book AS b ON w.BookID = b.ID
GROUP BY a.ID
ORDER BY SUM(b.SoldBookCount) DESC
LIMIT 1

由于您特别询问,
MAX
将选择该列中的最大值,但它不会选择具有该值的行。因此,您可以通过以下方式获得最大销量:

SELECT MAX(SoldBookCount)
FROM book
但是为了获得销量最大的boox的id,您必须这样做(如上所述)

另一种选择是计算最大值,然后选择售出该数量图书的图书

SELECT ID, SoldBookCount
FROM book
WHERE SoldBookCount=MAX(SoldBookCount)

这可能会慢一些,但如果第一本书是平手的话,它的优点是可以选择几本书。对于大多数售出的书籍,您可以对作者使用相同的想法。

切勿在
FROM
子句中使用逗号。始终使用正确、明确的
连接
语法签出
分组依据