Postgresql select 5行即使有3行数据
Postgresql select 5 rows even if there is 3 row of data
如何 Select 5 行,即使有 3 行数据,接下来的 2 行应该是空行。
您需要一个包含 5 个数字的 table,然后您为 table 分配一个行号并执行左连接。
cte是数据,最后是查询需要的:
WITH all5 as (
SELECT *
FROM (VALUES(1), (2), (3), (4), (5)) AS t (ID)
), some2 as (
SELECT *
FROM (VALUES('first'), ('second')) AS t (value)
)
SELECT *
FROM all5
LEFT JOIN (SELECT row_number() OVER (ORDER BY value) as rn, *
FROM some2) as t
ON all5.ID = t.rn
输出
您可以将结果与 空行 合并,它应该具有与 table 相同类型的列。示例:
with my_table(id, str, a_date) as (
values
(1, 'first', '2017-09-01'::date),
(2, 'second', '2017-09-02'),
(3, 'third', '2017-09-03')
)
select *
from my_table
union all
select null::int, null::text, null::date
from generate_series(1, 5) -- generate 5 empty rows
order by id nulls last
limit 5
id | str | a_date
----+--------+------------
1 | first | 2017-09-01
2 | second | 2017-09-02
3 | third | 2017-09-03
| |
| |
(5 rows)
如何 Select 5 行,即使有 3 行数据,接下来的 2 行应该是空行。
您需要一个包含 5 个数字的 table,然后您为 table 分配一个行号并执行左连接。
cte是数据,最后是查询需要的:
WITH all5 as (
SELECT *
FROM (VALUES(1), (2), (3), (4), (5)) AS t (ID)
), some2 as (
SELECT *
FROM (VALUES('first'), ('second')) AS t (value)
)
SELECT *
FROM all5
LEFT JOIN (SELECT row_number() OVER (ORDER BY value) as rn, *
FROM some2) as t
ON all5.ID = t.rn
输出
您可以将结果与 空行 合并,它应该具有与 table 相同类型的列。示例:
with my_table(id, str, a_date) as (
values
(1, 'first', '2017-09-01'::date),
(2, 'second', '2017-09-02'),
(3, 'third', '2017-09-03')
)
select *
from my_table
union all
select null::int, null::text, null::date
from generate_series(1, 5) -- generate 5 empty rows
order by id nulls last
limit 5
id | str | a_date
----+--------+------------
1 | first | 2017-09-01
2 | second | 2017-09-02
3 | third | 2017-09-03
| |
| |
(5 rows)