sql中几个有趣的函数

本文介绍了SQL中的一些有趣函数,包括用于分组拼接的`GROUP_CONCAT`,用于产生笛卡尔积的`CROSS JOIN`,如何按周显示日期区间,以及时间戳转换为5分钟间隔的`FROM_UNIXTIME`函数。通过实例展示了这些函数在实际操作中的应用。
摘要由CSDN通过智能技术生成
分组拼接函数

group_concat(拼接字段 order by 排序字段)这个函数可以按照指定分组,拼接每组中指定字段按照规则排序后的值为一个字符串。
也可以开窗使用group_concat(拼接字段) over(partition by 分组字段 order by 排序字段)

select 
	*
	,split(pay_gmv,',')[1]
	,split(pay_gmv,',')[2]
from
(SELECT 
	data_date
	,shop_num
	,shop_name
	,power
	,GROUP_CONCAT(concat_ws('-',data_item,pay_gmv) order by data_date,shop_num,data_item) pay_gmv
FROM kscs_test.test
where data_date='2023-02-20'
group by data_date,shop_num)
select 
	a.* 
	,b.time_group 
from dws.dws_niu_kwai_data a 
left join
(select
	data_date
	,brand
	,people
	,max(time_group) time_group -- 取最全的一个分组拼接值
from
( 
	select 
    	data_date
    	,brand
    	,people
    	,time_d
    	,group_concat(time_d) over(partition by data_date,brand,people order by time_d) time_group -- 按照data_date,brand,people分组,每组中所有的time_d升序后拼接展示为一个字符串
	from dws.dws_niu_kwai_data
	group by data_date,brand,people,time_d
) b 
group by data_date,brand,people) b 
on a.data_date=b.data_date and a.brand=b.brand and a.people=b.people
cross join函数

cross join可以返回两表的笛卡尔积,返回的表的记录数为两表记录数的乘积;常与UNNEST使用,UNNEST可以将一个数组存为一张临时表,且与数组所属的原表默认有关联关系。
AnalyticDB MySQL中的cross join实例
原结构:
A:[‘a’,‘b’]
B:[‘c’,‘d’,‘e’]
处理后结构:
A a
A b
B c
B d
B e

insert into dim.dim__list
SELECT 
	data_date
	,agent_id 
	,advertider_id
	,now()
FROM 
(
	select 
		data_date
		,agent_id
		,split(replace(replace(json_extract(data,'$.list'),'[',''),']',''),',') as id_array -- 将列表中的元素按逗号拆分
	from kscs_ods.ods_list)
CROSS JOIN UNNEST(id_array) as temp_table(advertider_id) -- 用UNNEST将拆分后的元素组成的数组存为临时表,并与原表进行笛卡尔积

可代替union all,进行列转行
例:将如下jsonarray格式进行解析

{
   
	"all_traffic_distribution": [{
   
		"main_source": {
   
			"source_name": "f1",
			"watch_pv": 4
		},
		"detail_source"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值