【发布时间】:2020-11-18 16:39:46
【问题描述】:
我创建了一个包含 4 列的假表: Farmer_name,crop_name,year,working_days
(红色的是同一个种植者)
>>>farmer crop_name year working_days
red potatoe 2018 110
red onion 2019 120
red onion 2020 130
red wheat 2019 70
blue coffe 2018 194
blue coffee 2019 115
我需要为每个农民找出每年工作日的最大价值。
例如,如果对于 2018 年的红色农民,我们在 working_days 中的值为:124,145 和 70,我想获得如下所示的新表:
>>> Farmer year working_days
red 2018 145
red 2019 190
red 2020 175
blue 2018 72
*示例中的蓝色是因为我想为我拥有的所有农民获得它,而不仅仅是为红色的。
我更多地使用 python,我觉得我想使用 for 循环,但从阅读中我发现在 sql 中这是不可能的,并且需求是使用 SQL 来完成。我看到有一个使用 while 循环的选项,但是当我在这里有两列需要考虑(种植者名称+年份)时,我不知道该怎么做。
我已经看到了将 while 循环用作 for 的示例:
DECLARE @cnt INT = 0;
WHILE @cnt < 10
BEGIN
PRINT 'Inside simulated FOR LOOP on TechOnTheNet.com';
SET @cnt = @cnt + 1;
END;
PRINT 'Done simulated FOR LOOP on TechOnTheNet.com';
GO
(来自这里:https://www.techonthenet.com/sql_server/loops/for_loop.php) (这里也类似:https://www.sqlshack.com/sql-while-loop-with-simple-examples/) 但我不明白如何在这种情况下使用计数器,我需要最大值,我还需要为每个农民检查它。
我的最终目标:为每个农民获得一张包含所有农民姓名、年份和该年“working_days”最大值的表格。
【问题讨论】:
-
请标记您正在使用的数据库
-
@JimMacaulay 刚刚添加(我创建的假数据库+添加示例)
标签: sql oracle for-loop while-loop