当前位置: 首页 > article >正文

经典sql题(十四)炸裂函数的恢复

下面是一个关于 SELECT 语句的例子,该示例展示了如何使用 CONCAT_WSCOLLECT_LIST 函数来处理炸裂之后学生成绩的数据。假设我们有一个名为 test 的表,结构如下:

表结构 test

student_idstudent_nameclassscore
1AliceClass190
1AliceClass185
1AliceClass180
2BobClass275
2BobClass280

SQL 查询示例

下面的 SQL 查询将使用 CONCAT_WSCOLLECT_LIST 函数来合并数据:

SELECT 
    student_id, 
    student_name, 
    CONCAT_WS(',', COLLECT_LIST(score)) AS scores,
    CONCAT_WS(' ', class) AS classes
FROM test
GROUP BY student_id, student_name;

查询结果

student_idstudent_namescoresclasses
1Alice90,85,80Class1
2Bob75,80Class2

说明

  • CONCAT_WS: 在这里我们使用 CONCAT_WS 来将 scores 列中的分数合并为一个以逗号分隔的字符串。COLLECT_LIST(score) 将所有分数作为列表收集。

  • GROUP BY: 使用 GROUP BY 子句按照 student_idstudent_name 进行分组,这样可以将每个学生的分数合并到一行中。

  • classes: 由于每个学生的班级是相同的,因此可以简单地用 CONCAT_WS 将班级信息合并。

下文将详细介绍 SQL 中的 CONCATCONCAT_WSCOLLECT_LISTCOLLECT_SET 函数,以及它们在实际应用中的区别和用法。

1. 数据合并函数对比

1.1 CONCAT

  • 功能: 用于将多个字符串连接成一个字符串。
  • 用法: 只支持字符串类型的输入。
示例:
SELECT CONCAT('A', 'B', 'C') AS result; 
-- 输出 'ABC'

1.2 CONCAT_WS

  • 功能: 用于将多个字符串连接成一个字符串,但可以指定分隔符。
  • 用法: 接收一个分隔符作为第一个参数,后续参数为要连接的字符串。
  • 注意: 仅适用于字符串类型。
示例:
SELECT CONCAT_WS(',', 'A', 'B', 'C') AS result; 
-- 输出 'A,B,C'

1.3 COLLECT_LIST

  • 功能: 将多行数据合并为一个数组,保留重复值。
  • 用法: 常用于分组查询中。
示例:
SELECT student_id, COLLECT_LIST(score) AS scores
FROM student_scores
GROUP BY student_id;

结果:

student_idscores
1[90, 85, 80]
2[75, 80]

1.4 COLLECT_SET

  • 功能: 将多行数据合并为一个集合,去重。
  • 用法: 仅保留唯一值,消除重复元素。
示例:
SELECT student_id, COLLECT_SET(score) AS scores
FROM student_scores
GROUP BY student_id;

结果:

student_idscores
1[90, 85, 80]
2[75, 80]

2. 主要区别总结

CONCAT vs CONCAT_WS:

  • CONCAT: 直接将字符串连接,不支持分隔符。
  • CONCAT_WS: 允许指定分隔符,使合并结果更具可读性。

COLLECT_LIST vs COLLECT_SET:

  • COLLECT_LIST: 会保留重复值,适用于需要保留所有数据的场景。
  • COLLECT_SET: 去重,只保留唯一值,适用于需要消除重复项的场合。

数据类型:

  • CONCATCONCAT_WS: 仅适用于字符串类型。
  • COLLECT_LISTCOLLECT_SET: 可用于任何数据类型。

3. 适用场景

  • 使用 CONCAT: 当你需要简单字符串连接而不需要分隔符时。
  • 使用 CONCAT_WS: 当你需要在连接字符串时加入特定分隔符以提高可读性时。
  • 使用 COLLECT_LIST: 当你需要合并多行数据并保留所有值(包括重复值)时。
  • 使用 COLLECT_SET: 当你需要合并多行数据并确保结果中只有唯一值时。

http://www.kler.cn/news/328104.html

相关文章:

  • 【AIGC】ChatGPT提示词助力自媒体内容创作升级
  • 鸿蒙NEXT开发-ArkTS(基于最新api12稳定版)
  • 梯度检查点技术的使用
  • LINUX-线程
  • MySql基础34题写题记录(3-10)
  • 【tbNick专享】虚拟机域控、成员服务器、降级等管理
  • pip install kaggle-environments ISSUE:Failed to build vec-noise
  • MicoZone-Git
  • 深度剖析IT技术前沿:编织数字世界的未来篇章
  • 怎么通过AI大模型开发一个网站?
  • SQL第11课——使用子查询
  • 1.1.5 计算机网络的性能指标(下)
  • 作文网源码 范文论文网模板 带会员系统+支付接口+整站数据
  • docker_阿里云镜像仓库
  • 代码随想录算法训练营第56天 | 1、冗余连接,2、冗余连接II
  • 【数学分析笔记】第4章第2节 导数的意义和性质(1)
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-29
  • 谷歌发布Imagen 3,超过SD3、DALL・E-3,谷歌发布新RL方法,性能提升巨大,o1模型已证明
  • Python 封装 socket 为 [TCP/UDP/MULTICAST] 客户端
  • powerbi计算销售额同比增长率
  • MySql Explain优化命令使用
  • Vue实战教程:如何用JS封装一个可复用的Loading组件
  • 基于php的律所管理系统
  • leetcode 513 找到左下角的值
  • SQLite3模块使用详解
  • 使用WebClient 快速发起请求(不使用WebClientUtils工具类)
  • 测试面试题:pytest断言时,数据是符点类型,如何断言?
  • 【Python|接口自动化测试】使用requests发送http请求时添加headers
  • 【LeetCode】每日一题 2024_9_27 每种字符至少取 K 个(双指针)
  • Android 安装应用-提交阶段之后剩下的操作