【问题标题】:Finding Max of Max mysql查找 Max mysql 的 Max
【发布时间】:2022-01-20 08:56:03
【问题描述】:

我正在使用一个名为 covid_vaccinations 的表格。

为了简要说明该表,它跟踪了从 2020 年 2 月 xx 日到 2022 年 1 月 XX 日的每一天所有国家/地区的疫苗接种完成情况。

  • 国家/地区名称在此表中称为“位置”。
  • 国家(位置)也归类在“大陆”列中

为了找到在亚洲完全接种疫苗的人,我使用了以下查询:

SELECT continent,location, MAX(people_fully_vaccinated)
FROM covid_vaccinations
WHERE continent LIKE '%ASIA%'
GROUP BY continent, location
ORDER BY 3 DESC;

我使用了 MAX(),因为 列包含累积数据数。

上面的查询给了我想要的结果,见<image 1>

这是我的问题:

如果我只想获得 people_fully_vaccinated 的 GREATEST 结果,我应该如何编写查询? 我在下面尝试过,它给了我与

相同的结果
SELECT location, MAX(peep_f_vacc_asia)
FROM (
     SELECT location, MAX(people_fully_vaccinated) as peep_f_vacc_asia
     FROM covid_vaccinations
     WHERE continent LIKE '%ASIA%'
     GROUP BY continent,location
     ) A
GROUP BY location
ORDER BY 2 DESC;

我希望看到的期望结果将只有一行,中国(其中 people_fully_vaccinated 的人数最多)

非常感谢你们......

【问题讨论】:

  • 在您下单后,您可以添加limit 1,这将只显示1条记录

标签: mysql sql mysql-workbench


【解决方案1】:

您可能只需使用LIMIT 查询就可以逃脱惩罚。对您的第一个查询稍作修改:

SELECT continent, location, MAX(people_fully_vaccinated)
FROM covid_vaccinations
WHERE continent LIKE '%ASIA%'
GROUP BY continent, location
ORDER BY 3 DESC
LIMIT 1;

但这仅适用于给定大陆和位置没有关系的情况,即完全接种疫苗的最大数量。如果您确实需要担心关系,并且您使用的是 MySQL 8+,那么我们可以使用RANK,如下所示:

WITH cte AS (
    SELECT continent, location, MAX(people_fully_vaccinated) AS max_fv,
           RANK() OVER (ORDER BY MAX(people_fully_vaccinated) DESC) rnk
    FROM covid_vaccinations
    WHERE continent LIKE '%ASIA%'
    GROUP BY continent, location
)

SELECT continent, location, max_fv
FROM cte
WHERE rnk = 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2011-08-05
    • 2011-09-30
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多