首页 > 数据库 >【面试数据岗必知必会——sql中的行转列、列转行与json函数】

【面试数据岗必知必会——sql中的行转列、列转行与json函数】

时间:2024-07-10 12:56:15浏览次数:23  
标签:必知 JSON Sales 转列 json 文档 SQL 数据 SELECT

面试数据岗必知必会 —— SQL中的行转列、列转行与JSON函数

导言:
在数据科学和数据分析领域,SQL(Structured Query Language)是处理和管理关系型数据库的标准语言。掌握SQL的高级技巧,如行转列(Pivot)、列转行(Unpivot)以及JSON函数,能显著提升你在面试中的竞争力,并在实际工作中更加高效地处理复杂数据。本文将深入探讨这些技巧,帮助你更好地准备面试,同时增强你的技能树。

行转列(Pivot)

行转列,即Pivot操作,是一种将数据集中的一列或多列转换为多行数据的方法。这在汇总数据、进行透视分析时非常有用。例如,你可能有一个包含销售数据的表格,其中每个产品在每行都有销售记录,但你想要按产品分类汇总销售量,这就需要用到Pivot。

示例代码

假设我们有以下表结构:

CREATE TABLE Sales (
    Product VARCHAR(50),
    Year INT,
    Sales INT
);

表中包含如下数据:

ProductYearSales
Apple2020100
Apple2021150
Banana202050
Banana202175

使用Pivot语句,我们可以将“Year”列的值转换为列名,得到每年的产品销售总和:

SELECT * FROM (
    SELECT Product, Year, Sales
    FROM Sales
) AS SourceTable
PIVOT (
    SUM(Sales)
    FOR Year IN (2020, 2021)
) AS PivotTable;

输出

Product20202021
Apple100150
Banana5075

列转行(Unpivot)

列转行,即Unpivot操作,与Pivot相反,它将列转换成行。在数据清洗和预处理阶段,这特别有用,尤其是当你需要将宽表转换为长表格式时。

示例代码

假设我们有以下宽表结构:

CREATE TABLE SalesSummary (
    Product VARCHAR(50),
    Year2020 INT,
    Year2021 INT
);

表中包含如下数据:

ProductYear2020Year2021
Apple100150
Banana5075

使用Unpivot语句,我们可以将“Year2020”和“Year2021”两列转换为多行数据:

SELECT Product, Year, Sales
FROM (
    SELECT Product, '2020' AS Year, Year2020 AS Sales
    FROM SalesSummary
    UNION ALL
    SELECT Product, '2021', Year2021
    FROM SalesSummary
) AS UnpivotedTable;

输出

ProductYearSales
Apple2020100
Apple2021150
Banana202050
Banana202175

JSON函数

随着JSON数据的普及,许多数据库系统都增加了对JSON的支持,包括存储、检索和操作JSON数据的功能。熟悉这些JSON函数可以让你更灵活地处理非结构化数据。

示例代码

假设我们有以下包含JSON字段的表结构:

CREATE TABLE Products (
    ProductID INT,
    Details JSON
);

表中包含如下数据:

ProductIDDetails
1{“Price”: 100}
2{“Price”: 200}

使用JSON函数,我们可以提取JSON字段中的数据:

SELECT ProductID, JSON_EXTRACT(Details, '$.Price') AS Price
FROM Products;

输出

ProductIDPrice
1100
2200

常见的JSON处理功能:

  1. JSON字符串转换

    • JSON_STRINGIFY: 将结构化数据转换为JSON格式的字符串。
    • TO_JSON: 类似于JSON_STRINGIFY,但具体名称和语法可能因数据库而异。
  2. JSON解析

    • JSON_EXTRACT: 提取JSON文档中的特定值。
    • JSON_QUERY: 返回JSON路径查询的结果。
    • JSON_VALUE: 提取JSON文档中的值并转换为SQL数据类型。
    • JSON_UNQUOTE: 去除字符串类型的JSON值周围的引号。
  3. JSON修改

    • JSON_INSERT: 向现有JSON文档插入新的键/值对。
    • JSON_SET: 设置或更新JSON文档中的键/值对。
    • JSON_REMOVE: 从JSON文档中删除一个或多个键。
    • JSON_REPLACE: 替换JSON文档中的一个或多个键的值。
    • JSON_MERGE_PATCH: 合并两个或多个JSON文档,使用RFC 6902的Patch标准。
  4. JSON生成

    • JSON_OBJECT: 创建一个新的JSON对象。
    • JSON_ARRAY: 创建一个新的JSON数组。
    • JSON_ARRAYAGG: 将多行数据聚合为一个JSON数组。
  5. JSON验证

    • JSON_VALID: 检查一个字符串是否为有效的JSON文档。
    • JSON_TYPE: 返回JSON值的类型。
  6. JSON结构操作

    • JSON_LENGTH: 返回JSON数组或对象的长度。
    • JSON_DEPTH: 返回JSON文档的深度。
    • JSON_PRETTY: 格式化JSON字符串以提高可读性。
  7. JSON搜索

    • JSON_SEARCH: 在JSON文档中搜索指定的值或模式。

请记得根据你所使用的具体数据库系统调整上述示例中的SQL语法,因为不同数据库(如MySQL、PostgreSQL、SQL Server等)可能会有不同的实现方式。

点赞关注收藏,获取更多干货知识~

标签:必知,JSON,Sales,转列,json,文档,SQL,数据,SELECT
From: https://blog.csdn.net/weixin_64259675/article/details/140319681

相关文章

  • 如何在Java中处理JSON数据
    如何在Java中处理JSON数据大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式之一。Java提供了多种库来处理JSON数据,最常用的包括Gson、Jackson和org.json等。在本文中,我们将详细介......
  • 跨域CORS JSONP回调 域名接管劫持
    跨域CORSJSONP回调域名接管劫持1.0前置知识我们首先要学习下同源策略,这在之前的博客中说过很多次了,同源策略限制了来自不同源的Web页面脚本如何相互交互,以防止恶意网站读取另一个网站的数据。这里的“源”指的是协议(http或https)、域名以及端口号的组合。同源策略的核心原则......
  • ASP.Net Core解读launchSettings.json
    一、环境目标框架:.NETCore3.1ASP.NETCore是一个全新的Web开发平台,微软在它上面构建了MVC、SingalR、GRPC、Orleans这样广泛使用的Web框架,我们先以MVC框架为例介绍利用ASP.NETCore构建项目的常见名词。这篇文章介绍启动配置文件launchSettings.json ASP.NET Core MVC项目......
  • Shell处理JSON命令行-jq
    jq是一个命令行工具,专门用来处理和转换JSON数据。官网:https://github.com/jqlang/jq安装aptinstalljq基本用法JSON示例文件file.json[{"name":"Alice","age":30},{"name":"Bob","age":35}]#格式化输出jq'.'......
  • resultful风格Json格式数据
    resultful风格Jsong格式数据1.使用json转换工具2.直接调用转换成json个数的数据显示3.页面通过ajax接受json数据packagecom.wisdragon.utils;importcom.fasterxml.jackson.annotation.JsonInclude.Include;importcom.fasterxml.jackson.core.JsonProcessingException......
  • json数据写入到mysql数据中
    importpymysql#json文件中格式一个列表包含一个个的字典数据#[{"title":"胖猫事件-21岁游戏代练胖猫跳江身亡,PUA捞女女主谭竹遭网友报告视频","cover":"https://suvip888.com/20240516/U8NEMN2P/1.jpg","m3u8_url":"https://vodvip888.com/20240516/U8NEMN2P/......
  • Maven工程下:alibaba fastjson2的各种序列化:java对象转json对象、json对象转java对象
    pom文件导入fastjson2坐标:<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.51</version></dependency>UserVO对象:@Data@AllArgsConstructor......
  • java比较json对象是否相等
    一、需求需要对比这2个json字符串是否完全一样(不用管顺序)1Stringdui="{\"adGroupVO\":{\"campaignId\":\"CAMPAIGN201912101000004559\",\"adGroupChannel\":{\"channelType\":\"SMS\",\"resourceCode\&......
  • 获取Echarts的geoJson文件(省市/区县)
    1.获取市的级别直接使用阿里云提供的工具直接获取: https://datav.aliyun.com/portal/school/atlas/area_selector#&lat=32.62087018318113&lng=118.43261718749999&zoom=4和 https://map.easyv.cloud/和 https://geojson.hxkj.vip/  2.获取县和区的细到街道的geoJson,需......
  • 一个难忘的json反序列化问题
    前言最近我在做知识星球中的商品秒杀系统,昨天遇到了一个诡异的json反序列化问题,感觉挺有意思的,现在拿出来跟大家一起分享一下,希望对你会有所帮助。案发现场我最近在做知识星球中的商品秒杀系统,写了一个filter,获取用户请求的header中获取JWT的token信息。然后根据token信息,获取......