我需要在Postgres中实现数据透视表,但是我不知道该怎么做。使用的函数应该是let users = {Alan: {age: 27,online: false},Jeff: {age: 32,online: true},Ryan: {age: 19,online: true}};
let count = Object.values(users)
.filter(({ online }) => online)
.length
console.log(count)
,但是我不确定我是否知道如何正确使用它。
给出如下表格:
crosstab()
我必须得到这样的东西:
column a | column b | column c | value 1 | value 2
0 |
1 |
2 |
3 |
4 |
所以我需要将行0,...,4作为列,并将column c | Column b | 0 | 1 | 2 | 3 | 4
| |value 1|value 1|value 1|value 1|value 1|
| |
作为值。 value 1
函数需要3列,但我需要同时出现crosstab()
和column c
。
答案 0 :(得分:1)
"column c"
和"column b"
是所谓的“额外”列。将它们放在行名之后和类别之前:
SELECT * FROM crosstab(
'SELECT "column a", "column c", "column b"
,"value 2", "value 1"
FROM tbl
ORDER BY 1'
, 'VALUES (0), (1), (2), (3), (4)'
) AS ct (
"column a" text
, "column c" text
, "column b" text
, "0" int
, "1" int
, "2" int
, "3" int
, "4" int);
要发表您的评论:
这些是嵌套的数字文字,无需引号:
, 'VALUES (0), (1), (2), (3), (4)'
String 文字需要引号(我现在使用美元引号作为外部引号):
, $$VALUES ('V0'), ('V1'), ('V2'), ('V3'), ('V4')$$
或者:
, $$SELECT unnest('{V0,V1,V2,V3,V4}'::text[])$$
db <>提琴here
请参阅:
关于crosstab()
:
...带有额外的列:
并考虑合理的列名。 (假设给定的名称只是象征性的。)