postgresql(mysql) 高级搜索2
背景:在进行分类统计的时候会有种需要袭击分类的数量(某个事物的标签),此时分步查询的时候,需要先统计,然后将其需要展示的字段的值全部展示出来,这样就会造成资源的额外消耗
mysql的分类详情的展示:
进行统计的查询以及效果展示:
SELECT files.*, COUNT(file_type.file_id) as count FROM files LEFT JOIN file_type on file_type.file_id = files.id GROUP BY files.id
期望将count里面的某个参数进行展示:
此时需要使用到group_cpncat 函数(查询及其展示):
SELECT files.*, COUNT(file_type.file_id) as count, GROUP_CONCAT(file_type.type) as typt FROM files LEFT JOIN file_type on file_type.file_id = files.id GROUP BY files.id
postresql实现上述方法:
使用 array_agg()方法 或array_to_string(array_agg()) 方法:
使用array_agg()的时候将对应数据以array进行展示了, 查询及效果展示:
SELECT "role".* , array_agg("permission".title) as permission_title FROM permission LEFT JOIN role_permissions on role_permissions.permission_id = permission.id LEFT JOIN "role" on "role"."id" = role_permissions.role_id GROUP BY "role".id
使用array_to_string(array_agg()) 的时候,将上述的array进行了拼接, 查询及效果展示:
SELECT "role".* , array_to_string(array_agg("permission".title), ',') as permission_title FROM permission LEFT JOIN role_permissions on role_permissions.permission_id = permission.id LEFT JOIN "role" on "role"."id" = role_permissions.role_id GROUP BY "role".id