标签:select 参数类型 value postgre family left join www sum mit
根据老师表(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 |
bit_or(expression) | smallint, int, bigint, or bit | 和入参类型相同 | 所有非NULL输入值的按位或,如果全为NULL则返回NULL | select bit_or(id) from tbl_test; | 3 |
bool_and(expression) | bool | bool | 如果输入全是true则返回true,否则为false | select bool_or(id::bool) from tbl_test; | t |
bool_or(expression) | bool | bool | 如果输入至少一个true,则返回true,否则返回false | select bool_or((id-1)::bool) from tbl_test; | t |
count(*) | bigint | 输入行数 | select count(*) from tbl_test; | 3 | |
count(expression) | any | bigint | 输入行中非NULL的行数 | select count(id) from tbl_test; | 3 |
every(expression) | bool | bool | 功能同bool_and | ||
json_agg(expression) | any | json | 将输入聚合成一个json数组 | select json_agg(id) from tbl_test; | [1, 2, 3] |
jsonb_agg(expression) | any | jsonb | 将输入聚合成一个json数组 | select jsonb_agg(id) from tbl_test; | [1, 2, 3] |
json_object_agg(name,value) | (any, any) | json | 将输入组成一个key/value对的json对象 | select json_object_agg(‘a‘,‘one‘); | { "a" : "one" } |
jsonb_object_agg(name,value) | (any, any) | jsonb | 将输入组成一个key/value对的json对象 | select jsonb_object_agg(‘a‘,‘one‘); | {"a": "one"} |
max(expression) | 输入最大值 |
select max(id) from tbl_test; |
3 | ||
min(expression) | 输入最小值 | select min(id) from tbl_test; | 1 | ||
string_agg(expression,delimiter) | (text, text) or (bytea, bytea) | 同参数类型 | 将输入使用delimiter连接成一个text | select string_agg(name,‘,‘) from tbl_test; | 张三,李四,王五 |
sum(expression) | smallint, int, bigint, real, double precision, numeric, interval, or money | 输入和 | select sum(id) from tbl_test; | 6 | |
xmlagg(expression) | xml | xml | 请参考xml类型及其函数 |
https://www.cnblogs.com/alianbog/p/5674838.html
标签:select 参数类型 value postgre family left join www sum mit
原文地址:https://www.cnblogs.com/lqqgis/p/13553198.html