SQL:for循环基于当前值创建新字段
这可能是一个奇怪的问题,因为我从来没有尝试过这个,它只是出现在我的脑海里。 我有一个表,其中包含一个名为“countries”的列以及用户ID和日期。我想统计一下每个国家在每一天有多少活跃用户。我想到的最简单的事情是创建新的字段,如country_usa,显示美国的用户数量。例如:SQL:for循环基于当前值创建新字段,sql,database,Sql,Database,这可能是一个奇怪的问题,因为我从来没有尝试过这个,它只是出现在我的脑海里。 我有一个表,其中包含一个名为“countries”的列以及用户ID和日期。我想统计一下每个国家在每一天有多少活跃用户。我想到的最简单的事情是创建新的字段,如country_usa,显示美国的用户数量。例如: date ___ country_usa ___ country_england ____ country_mexico 2020 ___ 344. ____ 566 ____ 8
date ___ country_usa ___ country_england ____ country_mexico
2020 ___ 344. ____ 566 ____ 889876
2019 ___ 678 _____ 7899. ____ 8765
我知道我可以使用case方法创建类似于上表的内容。比如说
select case when country = 'usa' then count(distinct player_id) end as country_usa
然而,这似乎是一个很大的工作,特别是有这么多的国家在我的桌子上。做这件事最快的方法是什么?是否可以使用循环执行此操作?您希望将
大小写作为count()
函数的参数:
select count(distinct case when country = 'usa' then player_id end) as country_usa
相反,您可以创建一个仅仅是价值总结的视图
Select Country, date, Count(player_id) from Table
Group By Country, date
编辑:您还可以使用枢轴功能
SELECT date, [usa] AS country_usa , [england] AS country_england , [mexico] AS country_mexico
FROM
(SELECT Select Country, date, player_id FROM table) p
PIVOT
(
COUNT (player_id )
FOR Country IN
( [usa], [england], [mexico])
) AS pvt
ORDER BY pvt.date;
您可能需要清理它的语法,但我认为这就是您要找的谢谢!但这只会为美国创造一个领域,有没有一个像loop这样的东西可以自动为所有国家创造呢?@Josh。你会为你关心的每个国家重复这个逻辑。太好了!但我需要相反的格式。就像我上面提到的。有可能吗?是的,你需要使用Pivot功能,你可以在这里找到信息,我会编辑我的评论来展示一个完美的例子!非常感谢:)完成了,我希望这就是你想要的