У меня есть следующие таблицы:верхние п строки таблицы в Postgres
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 |
мне нужно заполнить столбец «терцилей» со значениями 1-3 в соответствии со значениями в «значение» столбца , 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
заявлений. Как я могу это сделать? Используя подзапрос?
Лучший ответ зависит от нескольких вещей: Postgres версии, точное определение таблицы (PK, NOT NULL ограничения?), Фактическое количество строк. Вы хотите присвоить номера рангов всем столбцам (1-й, 2-й, 3-й и 3-й) или по 12 строк, независимо от общего количества строк? Возможно ли одновременное доступ к записи? Текущие ответы уязвимы для условий гонки с одновременным доступом к записи. Сравните: http://dba.stackexchange.com/questions/69471/postgres-update-limit-1/69497#69497 –