我有两张桌子:
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 上)
最简单的答案是,
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)