SQL查询以使用group by和aggegate函数创建具有现有数据操作和操作的新表[关闭]
Posted
技术标签:
【中文标题】SQL查询以使用group by和aggegate函数创建具有现有数据操作和操作的新表[关闭]【英文标题】:SQL query to create a new table with existing data manipulation and operation with group by and aggegate function [closed] 【发布时间】:2020-05-16 07:49:53 【问题描述】:我有一张如下表。
month year country test affected cases
4 2020 A 5 2 4
4 2020 A 57 10 20
4 2020 A 6 3 5
3 2020 A 9 5 7
3 2020 A 0 0 0
3 2020 A 6 2 4
1 2019 A 4 1 3
1 2019 A 2 1 1
4 2020 B 5 2 4
4 2020 B 57 10 20
4 2020 B 6 3 5
3 2020 B 9 5 7
3 2020 B 0 0 0
4 2019 C 6 3 5
1 2019 C 4 1 3
那我要做下面的操作
最后我想得到下面的输出。
这意味着我必须将月份中的所有测试值相加,例如 4 。 4 表示四月。并将 4 显示为 April 等等。
我怎样才能做到这一点?
我在下面尝试过。但没有成功。
SELECT month, year ,sum(cases/Tests*100%) as caseRate, sum(affected/cases * 100%) as affectedrate ,country FROM csv group by country ,month ,year")
【问题讨论】:
请将代码和数据作为文本发布,而不是images 标题描述了你必须做什么——你有具体的问题吗? 因为我是新手,这个问题对我来说看起来更难。我需要解决这个问题的方法 请查看dev.mysql.com/doc/refman/8.0/en/group-by-functions.html 和meta.***.com/questions/334822/… 我也喜欢您的个人资料列表,列出了 3 个(锥体)sql 方言的经验 @scaisEdge 我试过这个,但没有运气。 SELECT month, year ,sum(cases/Tests*100%) as caseRate, sum(affected/cases * 100%) as affectedrate ,country FROM csv group by country ,month ,year") 【参考方案1】:我认为这只是一个聚合查询:
select month, year, country,
sum(cases) * 100 / sum(test) as case_rate,
sum(affected) * 100 / sum(cases) as affected_rate
from t
group by month, year, country;
【讨论】:
【参考方案2】:你可以试试这个方法
SELECT month
, monthname(str_to_date(MonthNum,'%m')) Monthname
, year
,country
, sum((cases)/sum(Tests))*100 as caseRate
, sum((affected)/sum(cases))*100 as affectedrate
FROM csv
group by country ,month , Monthname, year
【讨论】:
我必须将 4 显示为月份名称 April。或 3 作为三月。怎么可能 @MahmudRiad 答案已更新 .. 带有月份名称以上是关于SQL查询以使用group by和aggegate函数创建具有现有数据操作和操作的新表[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何更新我的查询以符合 sql_mode=only_full_group_by 启用? [复制]
与 group by 一起使用的 sql.xml 中的查询是不是正确?