我正在尝试在PostgreSQL (8.4 +)中执行我称之为“反向计数(*)”的操作。我希望我的输出具有与每个字母的合计列中指定的数字完全相同的行数...
表1:
letter | total
-------------
a | 3
b | 2
c | 4
d | 1期望表输出:
letter
-----
a
a
a
b
b
c
c
c
c
d我不确定是否以及如何在这里使用unnest函数。
发布于 2013-01-25 02:30:00
是的-un嵌套是你想要的(当然,一旦你有了一个数组)
richardh=> SELECT array_fill(letter, ARRAY[total]) FROM expand;
array_fill
------------
{a,a,a}
{b,b}
{c,c,c,c}
{d}
(4 rows)
richardh=> SELECT unnest(array_fill(letter, ARRAY[total])) FROM expand;
unnest
--------
a
a
a
b
b
c
c
c
c
d
(10 rows)发布于 2013-01-28 10:21:49
以下是使用计数或数字表而不是UNNEST的解决方案。它是一个相当跨平台的解决方案,因为每个数据库都有一个创建numbers表的解决方案,尽管大多数没有postgresql那么好。
SELECT Letter
FROM
table1
INNER JOIN generate_series(1,100) num
ON table1.total >= num
ORDER BY LetterSQL Fiddle Demo
我将generate_series硬编码为100。但是,正如Clodoado演示的那样,您可以在对Generate_series的调用中使用MAX(Total)
SELECT Letter
FROM
table1
INNER JOIN
generate_series(
1,
(select max(total) from table1)
) num ON table1.total >= num
ORDER BY LetterSQL Fiddle Demo
https://stackoverflow.com/questions/14507198
复制相似问题