1. 程式人生 > 實用技巧 >PostgreSQL 分組、聚合函式

PostgreSQL 分組、聚合函式

根據老師表(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

https://www.cnblogs.com/alianbog/p/5674838.html