【问题标题】:Get the most often occurring year [duplicate]获取最常发生的年份[重复]
【发布时间】:2019-02-02 11:28:28
【问题描述】:

我在 MySQL Workbench 中名为 world 的工厂数据库中有下表:

表:country

相关栏目:

Code char(3) PK,
IndepYear smallint(6)

我想知道大多数国家独立的年份(或可能年份)。我不想只列出年份,每年一行。

编辑:

我找到了真正有效的正确解决方案。

SELECT IndepYear
FROM   (SELECT IndepYear,
               COUNT(IndepYear) AS Years
        FROM   world.country
        GROUP  BY IndepYear
        ORDER  BY Years DESC) AS T1
WHERE  Years IN (SELECT Years
                 FROM   (SELECT IndepYear,
                                COUNT(IndepYear) AS Years
                         FROM   world.country
                         GROUP  BY IndepYear
                         ORDER  BY Years DESC
                         LIMIT  1) AS T2
                 GROUP  BY IndepYear)
ORDER  BY IndepYear ASC; 

【问题讨论】:

  • 您能提供一些示例数据并期待结果吗?
  • 请注意,整数类型后面括号中的数字几乎完全没有意义

标签: mysql sql


【解决方案1】:

听起来你只想ORDER BY COUNTIndepYear。不要忘记,您还需要GROUP BY 此列,并添加LIMIT1,以便在按降序排序时获得最常出现的年份。

SELECT   `IndepYear`,
         COUNT(`IndepYear`) AS `CommonYear` 
FROM     `country`
GROUP BY `IndepYear`
ORDER BY `CommonYear` DESC
LIMIT    1;

【讨论】:

  • 它只适用于一年,如果有两年或更多年同时发生,它不会全部列出。
【解决方案2】:

使用聚合来获取每年的计数并将其限制为HAVING 子句中的最大计数。使用子查询获取最大计数,聚合聚合。

SELECT indepyear
       FROM country
       GROUP BY indepyear
       HAVING count(*) = (SELECT max(c)
                                 FROM (SELECT count(*) c
                                              FROM country
                                              GROUP BY indepyear) x);

SQL Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 2014-08-02
    • 2015-07-17
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2012-04-17
    • 2019-06-30
    相关资源
    最近更新 更多