PostgreSQL-如何在列上执行循环

时间:2019-03-05 14:29:20

标签: postgresql

我正在努力在Postgres上进行循环,但是postgres上的功能并不是我的小菜一碟。

我在postgres上有下表:

|  portfolio_1   | total_risk |
|----------------|------------|
| Top 10 Bets    |            |
| AAPL34         |    2,06699 |
| DISB34         |   1,712684 |
| PETR4          |   0,753324 |
| PETR3          |   0,087767 |
| VALE3          |   0,086346 |
| LREN3          |   0,055108 |
| AMZO34         |        0,0 |
| Bottom 10 Bets |            |
| AAPL34         |        0,0 |

我想做的是在“前10个下注”之后和“ Botton 10个下注”之前获取值。

我的目标是得到以下结果:

| portfolio_1 | total_risk |
|-------------|------------|
| AAPL34      |    2,06699 |
| DISB34      |   1,712684 |
| PETR4       |   0,753324 |
| PETR3       |   0,087767 |
| VALE3       |   0,086346 |
| LREN3       |   0,055108 |
| AMZO34      |        0,0 |

所以,我的目标是在“ Botton 10 Bets”之后再次获得“ Top 10 Bets”,“ Botton 10 Bets”和AAPL34。 行数是可变的(我是从Excel文件导入的),所以我需要循环执行此操作,对吗?

1 个答案:

答案 0 :(得分:0)

SQL表和结果集表示无序集。除非行明确提供该信息,否则没有“之前”或“之后”。

让我假设您有这样一列,为方便起见,我将其称为id

然后,您可以通过多种方式执行此操作。这是一个:

select t.*
from t
where t.id > (select min(t2.id) from t t2 where t2.portfolio_1 = 'Top 10 Bets') and
      t.id < (select max(t2.id) from t t2 where t2.portfolio_1 = 'Bottom 10 Bets');