如何解决需要编写查询而不是5个查询才能获得所有5个状态的结果
该CSV文件大约有62000行,其中包含州和县(县名在该特定州内是唯一的)。
我必须在视图上编写5个查询。每个查询将检索状态之一的State_Name,Date,MAX(SumConfirmed),其中每个州的确诊病例数最多。
SELECT State_Name,Date,ConfirmedCases AS Max_ConfirmedCases
FROM covid_by_state
WHERE ConfirmedCases =
(SELECT max(ConfirmedCases) AS Max_ConfirmedCases
FROM covid_by_state
WHERE State_Name='Texas');
上面的查询为我提供了一个特定状态的结果,但我无法找到如何在一个查询中获得5个状态的结果。
解决方法
我正在跳过使用视图;我认为它不会增加可读性,如果您想开始将查询限制在某个日期范围内或添加其他条件,那将是行不通的。
select
State_Name,max_confirmed_cases_date as Date,max(ConfirmedCases) as Max_ConfirmedCases
from (
select
State_Name,first_value(Date) over (partition by State_Name order by ConfirmedCases desc,Date) max_confirmed_cases_date,ConfirmedCases
from (
select Date,State_Name,sum(Daily_Count_Cases) ConfirmedCases
from Covid_By_County
group by Date,State_Name
) daily_state_totals
) daily_state_totals_with_max_cases_date
group by State_Name,max_confirmed_cases_date
最里面的子选择等效于您的视图;每个日期每个州每个州获得一排,总共有案例。中间的子选择重复该行的每一行,但使用first_value()来代替日期,以查找具有最高案例数的状态的日期(在平局的情况下,优先选择较早的日期)。然后,外部选择将其减少为每个状态一行。
或者如果您使用的是不支持窗口功能的旧版本:
select
State_Name,date(substr(min(concat(99999999999-ConfirmedCases,Date)),12)) as Date,max(ConfirmedCases) as Max_ConfirmedCases
from (
select Date,sum(Daily_Count_Cases) ConfirmedCases
from Covid_By_County
group by Date,State_Name
) daily_state_totals
group by State_Name
此查询使用技巧,通过获取同时编码大小写和日期的字符串的最小值来获取每个州的最大用例的日期。
,我认为您想要一个相关子查询:
SELECT cbs.State_Name,cbs.Date,cbs.ConfirmedCases as Max_ConfirmedCases
FROM covid_by_state cbs
WHERE cbs.ConfirmedCases = (SELECT max(cbs2.ConfirmedCases)
FROM covid_by_state cbs2
WHERE cbs2.State_Name = cbs.State_Name
);
这将同时返回 all 个状态的行。
编辑:
如果您希望所有日期都具有特定状态的最大值,则可以使用聚合:
SELECT cbs.State_Name,GROUP_CONCAT(cbs.Date) as dates,cbs.ConfirmedCases as Max_ConfirmedCases
FROM covid_by_state cbs
WHERE cbs.ConfirmedCases = (SELECT max(cbs2.ConfirmedCases)
FROM covid_by_state cbs2
WHERE cbs2.State_Name = cbs.State_Name
)
GROUP BY cbs.State_Name,cbs.ConfirmedCases
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。