我有以下列- Person_ID Days。对于一个人ID,可能有多天。就像这样:
Person_Id Days
1000 100
1000 200
1000 -50
1000 -10
1001 100
1001 200
1001 50
1001 10
1002 -50
1002 -10
我需要解决以下情况:
如果days列的所有值都是正数,则person_id需要的天数最少。如果天列既有正数又有负数,我需要最小的正数。如果都是负数,我需要最大的负数。
输出如下:
Person_id Days
1000 100
1001 10
1002 -10
我尝试使用case语句,但我无法在条件和分组中使用同一列。
5条答案
按热度按时间sauutmhj1#
试试这个(Postgres 9.4+):
vjrehmav2#
Oracle设置:
查询:
输出:
06odsfpq3#
Oracle解决方案:
对于每个
person_id
,如果至少有一个days
值是严格正的,那么min
将只接受正的days
,并将由NVL()
返回。否则,min()
将返回null,NVL()
将在所有days
上返回max()
(在本例中,所有days
都是负数或0)。lsmd5eda4#
-- + handle zero_divide ..对不起,以上内容只适用于MySQL。
类似这样的东西在任何地方都可以工作,相当于上面的查询:
或
wz1wpwve5#
可以通过在sql server中使用GroupBy子句来执行此操作。看看下面的查询:-