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

 

posted @ 2022-07-11 17:06  独丨恋  阅读(61)  评论(0编辑  收藏  举报