发布于 2026-01-06 0 阅读
0

探索高级 SQL 技术:透视、数据建模和面试挑战

探索高级 SQL 技术:透视、数据建模和面试挑战

我一直在磨练我的 SQL 技能,练习了很多 SQL 面试题,以下是我遇到的最有趣的问题之一。这个问题需要处理一个销售数据集,并使用 SQL 透视操作来分析和汇总数据。

问题 1.
我们有一个名为 sales_transactions 的表,其中包含产品销售记录,包括 transaction_id、product_name、category、region、sales_amount 和 sales_date 等详细信息。任务是编写一个 SQL 查询,将数据透视,以显示每个产品类别按地区划分的总销售额。

表结构:
sales_transactions 表包含以下列:

图片描述

目标:
目标是对销售数据进行透视,以便您可以查看每个地区每个类别的总销售额。

结果应该类似于这样:

图片描述

1). 编写 SQL 查询来透视这些数据,并返回每个产品类别按地区划分的总销售额。

2). 解释您在 SQL 中透视此数据的方法以及步骤背后的原因。

提示:请注意,在这种情况下,您可以使用 PIVOT 运算符(仅在 SQL Server 和 Oracle 中可用),或者,您可以使用 CASE 语句。

您可以使用这个交互式的基于 Web 的编译器来完成解决方案:https://onecompiler.com/mysql/42z9a9edr

更多问题。

1). 数据库规范化和反规范化。

问题:
您受命为一个电子商务系统设计数据库。该系统包含用户、产品、订单和评论。您会采取
哪些规范化步骤来设计数据库模式?如果您决定对数据库模式进行反规范化以提高查询性能,可能会有哪些权衡取舍?

需要讨论的关键概念:

  • 归一化(1NF、2NF、3NF、BCNF)
  • 非规范化及其对性能的影响
  • 冗余与查询优化之间的权衡
  • 索引和分区的使用

2). 为数据仓库设计事实和维度模型。

问题:
假设您正在为一家零售公司设计数据仓库。您需要对销售数据进行建模。请设计事实表和维度表,并解释您将如何处理缓慢变化维度(SCD)。

需要讨论的关键概念:

  • 事实表设计(粒度、外键)
  • 维度表(静态维度与缓慢变化维度)
  • SCD 的类型(SCD 1 型、SCD 2 型、SCD 3 型)
  • 替代键与自然键
  • 模式设计:星型模式与雪花模式

3). 在 SQL 中处理 JSON 数据。

问题:
您有一个名为 user_data 的表,其中 profile 列以 JSON 数据的形式存储用户个人资料。JSON 结构包括 first_name、last_name 和 preferences(这是一个嵌套的 JSON 对象,包含主题、通知等)。

编写 SQL 查询语句,从 JSON 数据中提取 first_name 和 theme 字段。

预期 SQL 查询语句(适用于 MySQL 或 PostgreSQL 等数据库):

SELECT 
    profile->>'$.first_name' AS first_name,
    profile->>'$.preferences.theme' AS theme
FROM 
    user_data;
Enter fullscreen mode Exit fullscreen mode

需要讨论的关键概念:

  • 在 SQL 中处理 JSON 数据类型(MySQL/PostgreSQL 中的 JSON 函数)
  • 查询嵌套的 JSON 对象
  • 查询 JSON 字段的性能考虑因素

4)用于数据质量检查的 SQL

问题:
您的任务是对客户数据库执行数据质量检查,该数据库包含一个名为 customers 的表,该表有以下列customer_id,,,,emailphone_numberdate_of_birthregistration_date

编写 SQL 查询语句,找出所有没有电话号码或电子邮件地址无效的客户。

预期 SQL 查询:

SELECT customer_id, email, phone_number
FROM customers
WHERE phone_number IS NULL 
   OR email NOT LIKE '%@%.%';
Enter fullscreen mode Exit fullscreen mode

需要讨论的关键概念:

  • 处理缺失值(IS NULL)
  • 使用字符串模式进行基本数据验证(例如,使用 LIKE 进行电子邮件验证)
  • SQL 中的数据清洗技术

4). 事务管理和 ACID 属性。

问题:
您正在设计一个银行系统,需要处理账户之间的转账。

编写一个 SQL 事务,将资金从一个账户转移到另一个账户,确保该事务遵循 ACID 属性(原子性、一致性、隔离性、持久性)。

预期 SQL 查询:

START TRANSACTION;

UPDATE accounts 
SET balance = balance - 500 
WHERE account_id = 1;

UPDATE accounts 
SET balance = balance + 500 
WHERE account_id = 2;

COMMIT;
Enter fullscreen mode Exit fullscreen mode

如果在交易过程中出现错误,则应回滚更改。

需要讨论的关键概念:

  • 使用 START TRANSACTION、COMMIT 和 ROLLBACK
  • 隔离级别:读已提交、可串行化、可重复读
  • 确保交易过程中的一致性

我知道有些问题可能很有挑战性,但掌握高级 SQL 和数据建模技术对于应对复杂的现实世界数据挑战至关重要。无论你是优化查询、设计高效的数据库模式,还是管理大型数据集,你所培养的技能都将是你数据分析、工程或软件开发等岗位成功的关键。坚持练习,保持好奇心,不断提升你的专业技能。

文章来源:https://dev.to/grayhat/sql-interview-question-pivoting-sales-data-by-region-and-category-5146