我对 mysql 有点陌生,所以我被困在查询中。 我有一个名为 songs 的数据库中的那个表(我只能在这个数据库中读取):
table name:cd_production
code_cd etaireia etos
______________________
400400 ODEON 1987
400401 ODEON 1986
400412 COLUMBIA 1990
400420 COLUMBIA 1990
400657 LYRA 1965
410000 COLUMBIA 1962
410001 COLUMBIA 1964
410003 PHILIPS 1979
410005 PHILIPS 1971
420430 ODEON 2002
420440 LYRA 2005
420450 COLUMBIA 2009
420460 ODEON 2007
420470 PHILIPS 2008
420480 ODEON 2002
420490 COLUMBIA 2010
500500 SONY 1968
500510 SONY 1972
600601 COLUMBIA 1962
600602 COLUMBIA 1963
600603 ODEON 1964
670670 PHILIPS 1983
我想找到制作的 CD 数量最多的 etaireia(这意味着每个 etaireia 都有不同的 code_cd)。 我问
select etaireia ,count(all code_cd) as cds
from cd_production
group by etaireia
我得到了带有返回列的列表
etaireia cds
________________
COLUMBIA 8
LYRA 2
ODEON 6
PHILIPS 4
SONY 2
这有点正确,但我不知道如何只获得最大 CD 的 etaireia
etaireia cds
________________
COLUMBIA 8
这里有什么技巧? 我不想使用 LIMIT 1 方法,因为它不通用。 提前致谢
最佳答案
如果您希望找到所有记录及其数量最大的记录,您可以在 HAVING
子句中使用子查询来确定 MAX()
值用于 COUNT()
。
SELECT
etaireia,
COUNT(*) AS cds
FROM
cd_production
GROUP BY etaireia
HAVING cds = (
SELECT MAX(cds)
FROM (SELECT etaireia, COUNT(*) as cds
FROM cd_production
GROUP BY etaireia) subq
)
http://sqlfiddle.com/#!2/869b4/4
限制为单行的方法因 RDBMS 而异。 MySQL 使用 LIMIT
,MSSQL 使用 TOP
,Oracle 使用 ROWNUM
...不需要在 HAVING
子句中嵌套子查询。相反,您可以在 HAVING
子查询中使用 LIMIT
以仅返回一个最大的 COUNT()
而无需包装另一个查询来获取 MAX()
.
SELECT
etaireia,
COUNT(*) AS cds
FROM
cd_production
GROUP BY etaireia
HAVING cds = (
SELECT COUNT(*)
FROM cd_production
GROUP BY etaireia
ORDER BY COUNT(*) DESC
LIMIT 1
)
关于mysql - 如何从计数中选择具有最大产值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544733/