我正在使用名为 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_complete_vaccinated 的最佳结果,我应该如何编写查询?
我在下面尝试了,它给了我与
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_complete_vaccinated 人数)
非常感谢你们...
最佳答案
您也许可以只使用 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;
关于mysql - 求 mysql 中的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70783255/