Mysql 不带排序依据的嵌套select中的max()值

Mysql 不带排序依据的嵌套select中的max()值,mysql,sql,nested,subquery,Mysql,Sql,Nested,Subquery,我发现的这个问题快把我逼疯了,(编辑:),因为我试图在没有orderby方法的情况下实现这一点。 我有一张桌子: 书籍作者(书籍,作者) 书和作者都是关键 现在我想选择不同“作者”数量最多的“书籍”值,以及作者数量。 在我们的例子中,查询应该检索包含3位作者的“book”2 book authors -------- ------------ 2 3 我已经能够通过此查询对它们进行分组并获得每本书的作者数量: select B.book, count(B.a

我发现的这个问题快把我逼疯了,(编辑:),因为我试图在没有orderby方法的情况下实现这一点。 我有一张桌子:

书籍作者(书籍,作者)

书和作者都是关键

现在我想选择不同“作者”数量最多的“书籍”值,以及作者数量。 在我们的例子中,查询应该检索包含3位作者的“book”2

book        authors
-------- ------------
2            3
我已经能够通过此查询对它们进行分组并获得每本书的作者数量:

select B.book, count(B.author) as authors
from BookAuthors B
group by B.book
这将导致:

book        authors
-------- -------------
1              2
2              3
3              1
现在我只想获得作者数量最多的那本书。 这是我尝试过的查询之一:

select Na.libro, Na.authors from (
    select B.book, count(B.author) as authors
    from BookAuthors B
    group by B.book
    ) as Na
where Na.authors in (select max(authors) from Na)

我有点挣扎

谢谢你的帮助

编辑: 由于@Sebas很好地回答了我的问题,并扩展了我的问题,因此我想到了使用CREATE-VIEW方法的解决方案:

create view auth as
    select A.book, count(A.author)
    from BooksAuthors A
    group by A.book
;
然后

select B.book, B.nAuthors
from auth B 
where B.nAuthors = (select max(nAuthors)
                    from auth)
我不能尝试这个,因为我没有mysql和我在一起。。。你试着让我知道

SELECT book b, COUNT(author) c 
FROM BookAuthors
GROUP BY b
ORDER BY c DESC LIMIT 1;
该解决方案将更美观、更高效,并具有以下优点:

CREATE VIEW v_book_author_count AS 
    SELECT book, COUNT(author) AS authors 
    FROM BookAuthors 
    GROUP BY book
;
然后:

SELECT cnt.book, maxauth.mx
FROM (
    SELECT MAX(authors) as mx
    FROM v_book_author_count 
    ) maxauth JOIN v_book_author_count AS cnt ON cnt.authors = maxauth.mx
;

我编辑了添加“no order by”约束的问题,因为即使使用“LIMIT 1”,它在资源方面也非常昂贵(需要先订购整个表)?是的,事实上,它首先订购整个表,然后将输出限制为一。嗨!这不是问题的目的,但我现在很想看看!b、 这本书并没有被定义,你们只是忘记了引用第三级select(它在mySql上检索错误),但这是一个非常好的答案。非常感谢。@Edoardoo添加视图选项我刚刚添加了另一个版本的创建视图实现。table1是为派生表指定的别名。好的,这将选择第一本书和作者的最大值,与该书无关。很抱歉回答错误。我试过这个问题,结果一如你所说。我找到的解决方案与@Sebas在回答的第一部分中所写的非常接近。
SELECT book b, COUNT(author) c 
FROM BookAuthors
GROUP BY b
ORDER BY c DESC LIMIT 1;
SELECT cnt.book, maxauth.mx
FROM (
    SELECT MAX(authors) as mx
    FROM 
        (
            SELECT book, COUNT(author) AS authors 
            FROM BookAuthors 
            GROUP BY book
        ) t
    ) maxauth JOIN 
        (
            SELECT book, COUNT(author) AS authors 
            FROM BookAuthors 
            GROUP BY book
        ) cnt ON cnt.authors = maxauth.mx
CREATE VIEW v_book_author_count AS 
    SELECT book, COUNT(author) AS authors 
    FROM BookAuthors 
    GROUP BY book
;
SELECT cnt.book, maxauth.mx
FROM (
    SELECT MAX(authors) as mx
    FROM v_book_author_count 
    ) maxauth JOIN v_book_author_count AS cnt ON cnt.authors = maxauth.mx
;