如何在 sql 中做 MAX(COUNT(*))

Ala*_*ate 0 mysql count max

我有两张桌子:

prgm[id,name]
notes[id,note,id_prgm]
Run Code Online (Sandbox Code Playgroud)

我实际上要求了解有关 prgm 的一些信息:

SELECT p.id, name, AVG(note), COUNT(note)
FROM notes n
    JOIN prgm p
    ON p.id=n.id_prgm
GROUP BY p.id
Run Code Online (Sandbox Code Playgroud)

并且按预期工作,但现在我想知道MAXofAVG(note)和 of COUNT(note),但是如果我这样做MAX(COUNT(note))会返回一个错误:Invalid use of group function。我明白为什么会出现这个问题,但我不知道如何解决它。

我看到的唯一方法是做两个子请求并将其放入里面MAX(),但是有没有比两个子请求更好的方法?

(我使用 php 在 MySql 上)

Joh*_*Woo 5

最简单的答案是,

SELECT  p.id, name, AVG(note), COUNT(note) totalCount
FROM    notes n
        INNER JOIN prgm p
            ON p.id=n.id_prgm
GROUP   BY p.id
ORDER   BY totalCount DESC
LIMIT   1
Run Code Online (Sandbox Code Playgroud)

但缺点是它不关心具有最高计数的重复记录。替代方案是,

SELECT  p.id, name, AVG(note), COUNT(note)
FROM    notes n
        INNER JOIN prgm p
            ON p.id=n.id_prgm
GROUP   BY p.id
HAVING  COUNT(note) =
        (
            SELECT  DISTINCT COUNT(note) totalCount
            FROM    notes n
                    INNER JOIN prgm p
                        ON p.id=n.id_prgm
            GROUP   BY p.id 
            ORDER   BY totalCount DESC
            LIMIT   1
        )
Run Code Online (Sandbox Code Playgroud)