hql 中分组函数 group by 支持多字段拼接的例题

题目如下

name

constellation

blood_type

孙悟空

白羊座

A

大海

射手座

A

宋宋

白羊座

B

猪八戒

白羊座

A

凤姐

射手座

A

求出星座血型一样的人,用“  |  ”连接:

射手座,A            大海|凤姐

白羊座,A            孙悟空|猪八戒

白羊座,B            宋宋

解法一: 利用子查询,先将星座和血型组合为一个字段,然后再利用这个组合字段分组,进行姓名的拼接

select
    t1.base,
    concat_ws('|', collect_set(t1.name)) name
from
    (select
        name,
        concat(constellation, ",", blood_type) base
    from
        person_info) t1
group by
    t1.base;

解法二: 直接对星座,血型俩个字段进行分组,然后姓名拼接

select constellation,blood_type,concat_ws('|',collect_set(name))
from person_info 
group by constellation,blood_type;

猜你喜欢

转载自www.cnblogs.com/yangxusun9/p/12422733.html