mysql - 如何从计数中选择具有最大产值的行

标签 mysql sql mysql-workbench

我对 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
)

and here is the MySQL-specific version ...

关于mysql - 如何从计数中选择具有最大产值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544733/

相关文章:

php - 在多个表中搜索并在所有表中应用条件

php - 按 transaction_code 显示数据库组中的数据

mysql - 我的 SQL 查询出了什么问题? (mysql.用户表)

mysql - [FireDac][物理][MySQL]-1101。不支持的 MySQL 版本 [0]。支持从 v 3.20 到 v6.2 的客户端和服务器

php - 过滤 MySQL 查询,无需重新查询数据库

php - 从类打印或从函数返回输出和打印之间有什么区别

mysql - 三张表的两次求和和内连接的SQL语句

php - 插入如何进行多对多查询 "OR"两个表

mysql无法建立远程连接

mysql-workbench - MySQL Workbench 连接失败