GROUP_CONCAT功能
mysql
category分组,并把组内的name使用“; ”分隔符连接
SELECT
category,
GROUP_CONCAT(name SEPARATOR "; ") # SEPARATOR后面是分隔符
FROM
demo
GROUP BY
category
功能: 将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
语法: group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
说明: 通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
hive
hive不提供GROUP_CONCAT函数,所以需要使用其他方法代替,我们可以使用CONCAT_WS()函数代替
SELECT
category,
CONCAT_WS("\; ", COLLECT_LIST(name))
FROM
demo
GROUP BY
category
组内排序下的GROUP_CONCAT对比
mysql中
SELECT
category,
GROUP_CONCAT(CONCAT(name, '-', level) ORDER BY level DESC SEPARATOR "; ") as res # ORDER BY level DESC表示组内排序
FROM
demo
GROUP BY
category
hive中
SELECT
temp.category,
CONCAT_WS("\; ", COLLECT_LIST(CONCAT(tmp.name, '-', tmp.level))) as res # CONCAT(tmp.name, '-', tmp.level)
FROM
(
SELECT * FROM demo ORDER BY level DESC
) tmp
GROUP BY
tmp.category
字符串的split功能
hive中
select split("1,2,3", ','); # 返回结果:
select split("1,2,3", ',')[0]; # 返回结果:1
select split("1,2,3", ',')[1]; # 返回结果:2
select split("1,2,3", ',')[2]; # 返回结果:3
mysql中
select substring_index("1,2,3",",",1); # 返回结果:1
select substring_index("1,2,3",",",2); # 返回结果:1,2
select substring_index("1,2,3",",",3); # 返回结果:1,2,3
select substring_index("1,2,3",",",-1); # 返回结果:3
select substring_index("1,2,3",",",-2); # 返回结果:2,3
select substring_index("1,2,3",",",-3); # 返回结果:1,2,3