如果我的子查询foo解放了行: -
ID, USERS
1 {23129}
2 {23142}
3 {23300,23300}
4 {23129,23300}
如何使用窗口函数获取查询中的唯一用户数,例如: -
SELECT ... FROM ( <subquery> ) FOO
我试过了: -
array_length(array_agg(array_length(array(SELECT Distinct unnest(users))),1)) over(), 1)
但是得到数组尺寸不一样的错误
注意:我无法更改子查询来解决此问题。
我可以按如下方式获取数组中的ID: -
string_to_array(string_agg(array_to_string(user_ids, ','), ',') over(),',')
但它们并不明显。
答案 0 :(得分:4)
你过度复杂 - 你可以取消数组,然后从中查询不同的数:
System.IO.Pipes
答案 1 :(得分:1)
您总是可以在一个简单的SQL函数中使用已知的alghoritm:
select *, array_unique_elements(users)
from (
values
(1, '{23129}'::int[]),
(2, '{23142}'),
(3, '{23300,23300}'),
(4, '{23129,23300}')
) foo (id, users)
id | users | array_unique_elements
----+---------------+-----------------------
1 | {23129} | 1
2 | {23142} | 1
3 | {23300,23300} | 1
4 | {23129,23300} | 2
(4 rows)
使用:
class Dashboard {
static get controller() { return [Dashboard]; }
static get controllerAs() { return 'vm'; }
static get template() { return '<ng-transclude></ng-transclude>'; }
static get transclude() { return true; }
constructor() {
this.name="Bob";
}
}
class InfoPanel {
static get template() { return '<span>My name is {{vm.value}}!</span>'; }
static get controller() { return [InfoPanel]; }
static get controllerAs() { return 'vm'; }
static get bindings() {
return {
value: '<'
};
}
constructor() {
}
}
angular.module("dashboardApp", [])
.component("dashboard", Dashboard)
.component("infoPanel", InfoPanel);
答案 2 :(得分:0)
我也想像Mureinik所暗示的那样。
关于你得到的错误 - 这是array_length
的紧密语法示例:
t=# with a(v) as (values('{1,2}'::int[]),('{2,3}'))
select array_length(array_agg(distinct unnest),1) from (
select unnest(v) from a
) a;
array_length
--------------
3
(1 row)
当然不会与窗口聚合 - 仅与GROUP BY