PostgreSQL 分組、聚合函式
阿新 • • 發佈:2020-08-24
根據老師表(teacher),老師任課關係表(teacher2class),課程表(class),通過表連線,得到老師的任課結構表,如下:
select t.id, t.name, c.title from teacher t
left join teacher2class t2c on t.id = t2c.teacher_id
left join class c on t2c.class_id = c.id;
現希望根據老師分組,將老師認的課程聚合在一起,根據分組和聚合函式,修改SQL程式碼,到的最終結果,如下:
select t.id, t.name, json_agg(c.title) from teacher t left join teacher2class t2c on t.id = t2c.teacher_id left join class c on t2c.class_id = c.id group by t.id;
通用聚合函式
函式 | 引數型別 | 返回型別 | 描述 | 示例 | 結果 |
---|---|---|---|---|---|
array_agg(expression) | 任意非陣列型別 | 引數型別的陣列 | 將入參包括NULL連線成一個數組 | select array_agg(id) from tbl_test; | {1,2,3} |
array_agg(expression) | 任意陣列型別 | 入引數據型別 | 將入引數組連線成更高維度的陣列,輸入的陣列必須是相同的維度,且不允許是空或NULL | select array_agg(array['b','c','a']); | {{b,c,a}} |
avg(expression) | smallint, int, bigint, real, double precision, numeric, or interval | 整形返回numeric,浮點型返回double precision,其他和入參型別相同 | 平均值 | select avg(id) from tbl_test; | 2.0000000000000000 |
bit_and(expression) | smallint, int, bigint, or bit | 和入參型別相同 | 所有非NULL輸入值的按位與,如果全為NULL則返回NULL | select bit_and(id) from tbl_test; | 0 |