更新Postgres中表的前n行

时间:2016-09-02 20:40:26

标签: sql postgresql

我有下表:

 year | value  | tercile
------+--------+---------
 1980 |   96.4 |
 1981 |    727 |
 1982 |  804.7 |
 1983 |    979 |
 1984 |    995 |
 1985 |  984.4 |
 1986 |  994.6 |
 1987 |  98.39 |
 1988 |     97 |
 1989 |  87.87 |
 1990 | 4054.3 |
 1991 |  82.89 |
 1992 |     94 |
 1993 |  97.61 |
 1994 |  99.68 |
 1995 |   99.9 |
 1996 |   9.42 |
 1997 |  75.66 |
 1998 |   2.16 |
 1999 |    696 |
 2000 |  99.38 |
 2001 |   9.81 |
 2002 |  99.27 |
 2003 |   2.75 |
 2004 |  12.51 |
 2005 |   9.29 |
 2006 | 994.71 |
 2007 |  97.06 |
 2008 |  64.44 |
 2009 |     95 |
 2010 |  40.88 |
 2011 |   9.46 |
 2012 | 742.86 |
 2013 |    9.5 |
 2014 | 736.38 |
 2015 |  93.13 |

我需要根据“value”列中的值填充值为1-3的“tercile”列。 3分配给具有12个最高值的记录,2分配给具有12个中间值的记录,1分配给具有最低12个值的记录。

我可以使用以下查询检索这些记录:

select * from trace_terciles order by value desc limit 12 
select * from trace_terciles order by value desc limit 12 offset 12
select * from trace_terciles order by value desc limit 12 offset 24

但我无法弄清楚如何更新这些SELECT语句的结果。我怎样才能做到这一点?通过使用子查询?

2 个答案:

答案 0 :(得分:2)

更新一个查询中的所有行:

getInfo

答案 1 :(得分:1)

怎么样

update trace_terciles set tercile=2 where year in (select year from trace_terciles order by value desc limit 12 offset 12)

,其他2例同样如此。