HQL面試題練習 —— 合并數據

題目來源:京東

目錄

  • 1 題目
  • 2 建表語句
  • 3 題解

1 題目


已知有數據 A 如下,請分別根據 A 生成 B 和 C。

數據A

+-----+-------+
| id  | name  |
+-----+-------+
| 1   | aa    |
| 2   | aa    |
| 3   | aa    |
| 4   | d     |
| 5   | c     |
| 6   | aa    |
| 7   | aa    |
| 8   | e     |
| 9   | f     |
| 10  | g     |
+-----+-------+

數據B

+-----+-----------------+
| id  |      name       |
+-----+-----------------+
| 7   | aa|aa|aa|aa|aa  |
| 4   | d               |
| 5   | c               |
| 8   | e               |
| 9   | f               |
| 10  | g               |
+-----+-----------------+

數據C

+-----+-----------+
| id  |   name    |
+-----+-----------+
| 3   | aa|aa|aa  |
| 4   | d         |
| 5   | c         |
| 7   | aa|aa     |
| 8   | e         |
| 9   | f         |
| 10  | g         |
+-----+-----------+
  1. 希望對 name 相同的數據進行合并處理,name 相同的合并到一起用 '|'進行拼接,id 取組內最大值;
  2. 希望對相鄰 name 相同的數據進行合并,name 相同的合并到一起用 '|' 進行拼接,id 取組內最大值;

2 建表語句


CREATE TABLE IF NOT EXISTS t_jd_idname_concat (id bigint, --idname STRING -- name
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS ORC;insert into t_jd_idname_concat(id, name) values
(1,'aa'),
(2,'aa'),
(3,'aa'),
(4,'d'),
(5,'c'),
(6,'aa'),
(7,'aa'),
(8,'e'),
(9,'f'),
(10,'g');

3 題解

1. 生成B

第一步:使用聚合函數開窗,給每行數據添加最大ID,作為新的分組ID。

selectid,name,max(id) over (partition by name) as new_id
from t_jd_idname_concat;

結果如下:

在這里插入圖片描述

第二步:根據 new_id 分組,拼接 name,得到結果

selectnew_id as id,concat_ws('|',collect_list(name)) as name
from(selectid,name,max(id) over (partition by name) as new_idfrom t_jd_idname_concat) t
group by new_id;

結果如下:

在這里插入圖片描述

2. 生成C


該小問屬于是連續問題上進行數據拼接,所以我們先要對數據進行分組處理。

第一步:增加標識列,確認是否與上一行相同,如果相同則給0,不同給1。

select id,name,if(name = lag(name, 1, name) over (order by id), 0, 1) as flag
from t_jd_idname_concat;

結果如下:

在這里插入圖片描述

第二步:對 flag 累積求和,得到分組標志。

注意,第一步給flag 相同為0 不同為 1,疊加本步驟累積求和是一個常見解決連續問題的方式。

selectid,name,flag,sum(flag)over(order by id) as grp
from(selectid,name,-- 這里要注意if語句中0,1的位置不能互換(核心)if(name = lag(name,1,name)over(order by id),0,1) as flagfrom t_jd_idname_concat) t;

結果如下:

在這里插入圖片描述

第三步:求分組內的最大值,完成拼接。

selectid,concat_ws('|',collect_list(name)) as name
from
(selectgrp,name,max(id) over(partition by grp) as id
from
(selectid,name,flag,sum(flag)over(order by id) as grp
from(selectid,name,-- 這里要注意if語句中0,1的位置不能互換(核心)if(name = lag(name,1,name)over(order by id),0,1) as flagfrom t_jd_idname_concat) t ) tt ) ttt
group by id;

結果如下:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16305.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16305.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16305.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 使用 ActivityResultLauncher 申請權限

前面介紹了 Android 運行時權限。 其中,申請權限的步驟有些繁瑣,需要用到:ActivityCompat.requestPermissions 函數和 onRequestPermissionsResult 回調函數,今天就借助 ActivityResultLauncher 來簡化書寫。 步驟1:創…

基于FPGA的VGA協議實現

文章目錄 一、VGA介紹1.1 VGA原理1.2VGA電路 二、配置三、實現3.1 字符顯示3.2圖片顯示 四、代碼4.1.vga驅動模塊4.2數據模塊4.3按鍵消抖模塊4.4頂層模塊4.5TCL引腳綁定 參考 一、VGA介紹 1.1 VGA原理 VGA接口 最主要的幾根線: VGA其實就是相當于一塊芯片&#…

gcc g++不同版本切換命令

sudo update-alternatives --config g sudo update-alternatives --config gcc ubuntu20.04 切換 gcc/g 版本_ubuntu降低g版本-CSDN博客

YOLOv10嘗鮮測試五分鐘極簡配置

最近清華大學團隊又推出YOLOv10,真是好家伙了。 安裝: pip install supervision githttps://github.com/THU-MIG/yolov10.git下載權重:https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt 預測: from ult…

Superset,基于瀏覽器的開源BI工具

BI工具是數據分析的得力武器,目前市場上有很多BI軟件,眾所周知的有Tableau、PowerBI、Qlikview、帆軟等,其中大部分是收費軟件或者部分功能收費。這些工具一通百通,用好一個就夠了,重要的是分析思維。 我一直用的Tabl…

【HMGD】STM32/GD32 CAN通信

各種通信協議速度分析 協議最高速度(btis/s)I2C400KCAN1MCAN-FD5M48510MSPI36M CAN協議圖和通信幀 CubeMX CAN配置說明 CAN通信波特率 APB1頻率 / 分頻系數 /(BS1 BS2 同步通信段)* 1000 ? 42 / 1 / (111) * 1000 ? 14,000 KHz ? 1400000…

吉林大學計科21級《軟件工程》期末考試真題

文章目錄 21級期末考試題一、單選題(2分一個,十個題,一共20分)二、問答題(5分一個,六個題,一共30分)三、分析題(一個10分,一共2個,共20分&#xf…

前端自定義Echarts 圖的時候,重新渲染,頁面還保存原來的數據

自定義 setAxisSingleOption(optionData){var options this.axisSingleOptionoptions.title.text optionData.title.textoptions.xAxis.data optionData.xAxis.dataoptions.legend.data optionData.legend.dataoptions.series optionData.seriesoptions.grid optionData…

【C語言】10.C語言指針(1)

文章目錄 1.內存和地址1.1 內存1.2 究竟該如何理解編址 2.指針變量和地址2.1 取地址操作符(&)2.2 指針變量和解引?操作符(*)2.2.1 指針變量2.2.2 如何拆解指針類型2.2.3 解引?操作符 2.3 指針變量的?? 3.指針變量類型的意…

匯編:字符串的輸出

在16位匯編程序中,可以使用DOS中斷21h的功能號09h來打印字符串;下面是一個簡單的示例程序,演示了如何在16位匯編程序中打印字符串: assume cs:code,ds:data ? data segmentszBuffer db 0dh,0ah,HelloWorld$ //定義字符串 data …

【C++】哈夫曼編碼:高效的壓縮算法

哈夫曼編碼:高效的壓縮算法 什么是哈夫曼編碼? 哈夫曼編碼是一種用于數據壓縮的無損編碼方法,由David A. Huffman于1952年提出。它利用了字符出現頻率的不均勻性,通過構建最優前綴碼,能夠有效減少數據的冗余&#xf…

Flutter仿照微信實現九宮格頭像

一、效果圖 2、主要代碼 import dart:io; import dart:math;import package:cached_network_image/cached_network_image.dart; import package:flutter/material.dart;class ImageGrid extends StatelessWidget {final List<String> imageUrls; // 假設這是你的圖片URL…

關于Iterator 和ListIterator的詳解

1.Iterator Iterator的定義如下&#xff1a; public interface Iterator<E> {} Iterator是一個接口&#xff0c;它是集合的迭代器。集合可以通過Iterator去遍歷集合中的元素。Iterator提供的API接口如下&#xff1a; forEachRemaining(Consumer<? super E> act…

VS2022通過C++網絡庫Boost.Asio創建一個簡單的同步TCP服務器和客戶端

Boost.Asio是一個用于網絡和異步編程的C庫。它提供了一種跨平臺的方式來處理網絡編程和異步操作&#xff0c;使開發人員能夠創建高性能的網絡應用程序&#xff0c;asio幾乎支持所有你能夠想到的網絡協議&#xff0c;比如tcp、udp、ip、http、icmp等&#xff0c;C通過asio庫可以…

找出第 K 大的異或坐標值

問題 給你一個二維矩陣 matrix 和一個整數 k &#xff0c;矩陣大小為 m x n 由非負整數組成。 矩陣中坐標 (a, b) 的 值 可由對所有滿足 0 < i < a < m 且 0 < j < b < n 的元素 matrix[i][j]&#xff08;下標從 0 開始計數&#xff09;執行異或運算得到。…

淺談網絡通信(1)

文章目錄 一、認識一些網絡基礎概念1.1、ip地址1.2、端口號1.3、協議1.4、協議分層1.5、協議分層的2種方式1.5.1、OSI七層模型1.5.2、TCP/IP五層模型[!]1.5.2.1、TCP/IP五層協議各層的含義及功能 二、網絡中數據傳輸的基本流程——封裝、分用2.1、封裝2.2、分用2.2.1、5元組 三…

基于大模型和RAG技術實現的開源項目

基于大模型和RAG技術實現的開源項目 為解決大模型的不足&#xff0c;使用RAG技術增強大模型生成內容的針對性和可讀性能力&#xff0c;有很多不錯的開源項目。例如下面的項目。 1 ragflow 優點&#xff1a;可以對文檔和知識庫進行管理&#xff0c;構建不同的知識庫&#xff…

python冰雹序列的探索與編程實現

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、冰雹序列的奧秘 二、編程實現冰雹序列 三、測試與驗證 四、總結與展望 一、冰雹序列的…

整理好了!2024年最常見 20 道 Redis面試題(八)

上一篇地址&#xff1a;整理好了&#xff01;2024年最常見 20 道 Redis面試題&#xff08;七&#xff09;-CSDN博客 十五、Redis 的性能調優有哪些方法&#xff1f; Redis的性能調優是一個多方面的工作&#xff0c;涉及到硬件、配置、代碼層面的優化等多個方面。以下是一些常…

openEuler 22.03 LTS SP3源碼編譯部署OpenStack-Caracal

openEuler 22.03 LTS SP3源碼編譯部署OpenStack-Caracal 說明機器詳情安裝操作系統注意事項基礎準備Controller節點 && Compute節點 && Block節點關閉防火墻關閉selinux設置靜態IP更新安裝前準備Controller節點 && Compute節點 && Block節點設…