Postgresql选择,显示固定计数行

时间:2015-11-11 07:51:50

标签: postgresql select rows minimum

简单的问题。我有一张桌子" tablename"有3行。当计算行数时,我需要在我的选择中显示5行。 5.

select * from tablename


+------------------+
|colname1 |colname2|
+---------+--------+
|1        |AAA     |
|2        |BBB     |
|3        |CCC     |
+---------+--------+

在此查询中,我显示表中的所有行。 但我需要显示5行。 2行是空的。 例如(我需要):

+------------------+
|colname1 |colname2|
+---------+--------+
|1        |AAA     |
|2        |BBB     |
|3        |CCC     |
|         |        |
|         |        |
+---------+--------+    

最后2行为空。 有可能吗?

1 个答案:

答案 0 :(得分:2)

这样的事情:

with num_rows (rn) as (
   select i
   from generate_series(1,5) i -- adjust here the desired number of rows
), numbered_table as (
   select colname1, 
          colname2,
          row_number() over (order by colname1) as rn
   from tablename
)
select t.colname1, t.colname2
from num_rows r
  left outer join numbered_table t on r.rn = t.rn;

这为tablename中的每一行分配一个数字,并将其连接到固定数量的行。如果您知道colname1中的值始终是连续的且没有间隙(这种可能性极小),那么您可以使用row_number()删除第二个CTE中行号的生成。

如果您不关心返回哪些行,您可以省略order by部分 - 但匹配的行将随机 。离开order by会更有效率。

无论行tablename包含多少行,上述内容总是会返回5行。如果您希望至少 5行,则需要翻转外部联接:

....
select t.colname1, t.colname2
from numbered_table t
  left outer join num_rows r on r.rn = t.rn;

SQLFiddle示例:http://sqlfiddle.com/#!15/e5770/3