首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

行转列-有序行转列

collect_set concat_ws 三、有序行转列 根据配送订单记录表,查询出骑手id,顾客id列表,要求顾客id列表中的顺序按照送达时间早晚排序。...分析 这里要求按照订单送达时间,对顾客id进行排序。...直接考虑是使用开窗函数,根据时间进行排序(这种方法不可行,原因在于collect_list和collect_set那句提示“该函数是非确定性的,因为收集结果的顺序取决于行的顺序,这在经过shuffle之后可能是不确定的...另外一种解法是将时间和用户id拼接在一起,时间在前,用户id在后,这样对整个字符串拼接为数组,进行排序后再拆分,如此得到的数据能确定保证按照顺序完成。...1.不确定解法(不建议使用) collect_list执行SQL select rider_id, delivery_time, customer_id, collect_list

6110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    大数据 面试 SQL 041 按照顺序进行行转列拼接

    所以我们将id和val进行拼接,这样对整个字符串进行排序就会按照id的顺序排序。这里需要注意,因为id是数字类型,直接拼接会导致按照字符顺序,即11在2前面,为了解决这个问题,我们需要左补零。...整体考察的collect_listcollect_list结果不保证有序,concat,sort_array,regexp_replace等函数 维度 评分 题目难度 ⭐️⭐️⭐️⭐️ 题目清晰度 ⭐️...保证所有数据结果位数相同,然后与和val进行拼接 select concat_ws(':',lpad(id,5,0),val) from t_table_041 查询结果 2.将数据进行聚合,并将结果进行排序...select sort_array(collect_list(concat_ws(':',lpad(id,5,0),val))) from t_table_041 查询结果 3.将结果进行字符串替换,...得到最终结果 select regexp_replace(concat_ws(',',sort_array(collect_list(concat_ws(':',lpad(id,5,0),val))))

    23910

    hive sql语句和mysql用法区别存档

    ;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。...hive不提供GROUP_CONCAT函数,所以需要使用其他方法代替,我们可以使用CONCAT_WS()函数代替,如下: SELECT category, CONCAT_WS("\; ", COLLECT_LIST...(name)) FROM test_group GROUP BY category 输出结果如下: 注意: COLLECT_LIST表示组内不去重,COLLECT_SET表示组内去重...2、组内排序下的GROUP_CONCAT对比 需求如下: 写出一个sql语句,按照category分组,并把组内的name和level使用“name-level”格式使用“; ”分隔符连接,并在组内使用...FROM test_group GROUP BY category 输出结果如下: (2)hive中 SELECT temp.category, CONCAT_WS("\; ", COLLECT_LIST

    1.9K20

    滴滴大数据面试SQL-截止目前登陆用户数及登陆用户列表

    --+-----------+------------------------+ 二、分析 统计截止到当前行的登录用户数,考察的是聚合函数开窗函数;查询用户列表考察的数据对数据的聚合、数组去重、数组排序等操作...log_date, user_id, count(user_id) over (order by log_date asc) as user_cnt, collect_list...这里说明order by 之后 有相同的数据,则取较大值,并且不区分先后顺序; collect_list()函数进行聚合处理之后的结果,user_list也是一样的,包含到截止相同排序的最后一行数据。...2.数据去重聚合 这里我们加上去重,使用collect_set替换掉collect_list 执行SQL select log_date, user_id, count(distinct...,然后去重得到最后结果 上面数据观察可知相同日期的结果相同我们只要对用户列表进行排序,然后使用group by 进行去重即可得到最终结果 执行SQL select log_date, user_cnt

    13310

    大数据面试SQL035-用户行为路径分析

    包含'A,B' (2)包含’A%B%D'并且不能是‘A%B%C%D’ 维度 评分 题目难度 ⭐️⭐️⭐️⭐️ 题目清晰度 ⭐️⭐️⭐️⭐️⭐️ 业务常见度 ⭐️⭐️⭐️⭐️ 三、SQL 首先我们知道collect_list...所以我们需要将时间op_time和op_id进行拼接,拼接完成之后,时间在前,对整个字符串进行排序,然后再把op_time去掉,保留op_id的拼接字符串,然后对字符串进行验证。...1)拼接op_time和op_id,然后根据用户和日期进行分组,collect_list聚合出每天用户的行为,使用sort_array保证拼接后的字符串有序。...为了方便看结果,最后进加了order by select user_id, dt, concat_ws(',',sort_array(collect_list(op_str))) as op_sort...select user_id, dt, regexp_replace(concat_ws(',',sort_array(collect_list(op_str))),'(\\d{4}-\\d{2}-\

    24110

    (文末有福利)使用collec_list、collect_set函数进行行转列

    ----------+----------------------+--------------+-----------+----------+ 二、函数介绍 1.collect_list函数介绍 collect_list...(expr) - 收集并返回一个非唯一元素的列表 Examples: > SELECT collect_list(col) FROM VALUES (1), (2), (1) AS tab(col);...Since: 2.0.0 3.sort_array介绍 sort_array(array[, ascendingOrder]) - 根据数组元素的自然顺序,将输入数组排序为升序或降序。...在升序排序中,空元素将被放置在返回数组的开头;在降序排序中,空元素将被放置在返回数组的末尾。...三、行转列 1.直接行转列 根据配送订单记录表,查询出骑手id,配送品类数据 goods_type_list 执行SQL select rider_id, concat_ws(',', collect_list

    10810

    常见排序算法-冒泡排序、选择排序 、插入排序 、快速排序、 归并排序 、堆排序

    ‍个人主页: 才疏学浅的木子 ‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 ‍♂️ 本文来自专栏: 算法 算法类型:排序算法 排序算法 冒泡排序 冒泡排序的优化 选择排序 插入排序...快速排序 归并排序排序 冒泡排序 平均时间复杂度: o(n^2) 最好时间: o(n) 最坏时间: o(n^2) 空间复杂度: o(1) 是否稳定: 稳定 简单的冒泡排序...[3,2,1,4,5,6] 如果按照普通冒泡排序下次需要遍历的下标范围为[0,4] 但是[3,4]是已经有序的,所以可以减少比较,保存上次交换的结束位置 public int[] bubbleSort...平均时间复杂度: o(n^2) 最好时间: o(n) 最坏时间: o(n^2) 空间复杂度: o(1) 是否稳定: 稳定 插入排序 public int[] insertSort...平均时间复杂度: o(nlogn) 最好时间: o(nlogn) 最坏时间: o(n^2) 空间复杂度: o(logn) 是否稳定: 不稳定 快速排序 public void

    91950

    ————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序

    文章涉及具体代码gitee: 登录 - Gitee.com 1.插入排序 具体分析过程见我的博客插入排序: [数据结构]——排序——插入排序-CSDN博客 1.直接插入排序 void InsertSort...5.总的分析总结 插入排序是一种简单直观的排序算法,它的基本思想是将待排序的元素逐个插入到已排序序列中的适当位置,直到全部元都插入完毕。插入排序包直接插入排序和希尔排序。...直接插入排序: 算法思想:将待排序序列分为已排序和未排序两部分,初始时已排序部分只有一个元素。然后从未排序部分依次取出元素,与已排序部分的元素进行比较并插入到合适的位置。...选择排序是一种简单直观的排序算法,它的基本思想是每次从待排序序列中选择最小(或最大)的元素放到已排序序列的末尾。选择排序包括选择排序和堆排序。...选择排序: 算法思想:将待排序序列分为已排序和未排序两部分,初始时已排序部分为空。每次从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。

    12010

    基本排序算法(冒泡排序 选择排序 插入排序 快速排序 归并排序 基数排序 希尔排序

    项目地址:https://github.com/windwant/windwant-service/tree/master/algorithm 冒泡排序:两两比较,大数冒泡 升序: public static...选择排序:选择剩余元素中最小(最大)的元素放置到初始选择集合中(空) public static void SelectionSortAsc(int[] arr){ int min = 0;...:设定一个初始已排序的集合(一般选择一个元素),从剩余的集合中将各个元素以此插入到初始集合中的正确位置 public static void insertionSort(int [] array){...左边的元素值都小于anchor值,右边的值都大于anchor值,递归排序左右两侧排序 //左边元素。...值索引+1---high if (end < high) { quikeSort(arr, end + 1, high); } } 归并排序

    70620

    【最全的大数据面试系列】Hive面试题大全

    写出 hive 中 split、coalesce 及 collect_list 函数的用法(可举例)? 8. Hive 有哪些方式保存元数据,各有哪些特点? 9.Hive 内部表和外部表的区别?...order by:会对输入做全局排序,因此只有一个 reducer(多个 reducer 无法保证全局有序)。只有一个 reducer,会导致当输入规模较大时,需要较长的计算时间。...sort by:不是全局排序,其在数据进入 reducer 前完成排序。 distribute by:按照指定的字段对数据进行划分输出到不同的 reduce 中。...写出 hive 中 split、coalesce 及 collect_list 函数的用法(可举例)?...collect_list 列出该字段所有的值,不去重 => select collect_list(id) fromtable。 8. Hive 有哪些方式保存元数据,各有哪些特点?

    2.2K20

    详解排序算法--堆排序选择排序排序

    选择排序 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。...首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。...选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。 ? !...这就是堆排序的由来 堆排序排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。...原地堆排序 基于以上堆相关的操作,我们可以很容易的定义堆排序

    98430
    领券