<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>SQL on 老张开工了</title>
    <link>/sql/</link>
    <description>Recent content in SQL on 老张开工了</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="/sql/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>SQL 在 ETL 中的应用</title>
      <link>/posts/2026/04/etl-sql/</link>
      <pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate>
      <guid>/posts/2026/04/etl-sql/</guid>
      <description>SQL 在 ETL 中的角色 很多人一提到 ETL 就想到 Python 或 Spark，但 SQL 才是 ETL 领域最基础也最强大的工具。无论你用什么框架，最终的数据操作大多会落到 SQL 上。dbt 用 SQL 做转换，Spark SQL 用 SQL 做分析，甚至 Pandas 的 DataFrame 操作在概念上也和 SQL 的 SELECT、GROUP BY、JOIN 一一对应。&#xA;SQL 的优势在于声明式：你告诉数据库&amp;quot;要什么&amp;quot;，而不是&amp;quot;怎么做&amp;quot;。数据库优化器会帮你决定最佳的执行路径。对于数据量在千万级以下的 ETL 任务，纯 SQL 方案往往比 Python 方案更简洁、更高效。&#xA;CTE：构建可读的 ETL 管道 公用表表达式（CTE）是 SQL ETL 中最有用的语法之一。它让你能把复杂的转换拆成多个逻辑步骤，每个步骤清晰独立，就像管道中的一个个节点。&#xA;`sql &amp;ndash; 一个典型的 ETL 管道，用 CTE 分步实现 WITH &amp;ndash; 步骤 1：抽取原始数据 raw_orders AS ( SELECT * FROM orders WHERE order_date &amp;gt;= &amp;lsquo;2026-01-01&amp;rsquo; ),</description>
    </item>
    <item>
      <title>建表与数据类型</title>
      <link>/posts/2025/02/table-and-datatypes/</link>
      <pubDate>Mon, 03 Feb 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/02/table-and-datatypes/</guid>
      <description>数据类型概览 PostgreSQL 支持丰富的数据类型，是 SQL 标准实现最全面的数据库之一。&#xA;数值类型 -- 整数类型 SMALLINT -- 2字节，范围 -32768 ~ 32767 INTEGER -- 4字节，范围 -21亿 ~ 21亿 BIGINT -- 8字节，范围超大 -- 精确小数 NUMERIC(10,2) -- 总共10位，小数点后2位，精确计算 DECIMAL(10,2) -- NUMERIC 的别名 -- 浮点类型 REAL -- 4字节，6位十进制精度 DOUBLE PRECISION -- 8字节，15位十进制精度 -- 自增类型 SMALLSERIAL -- 2字节自增 SERIAL -- 4字节自增（常用） BIGSERIAL -- 8字节自增 字符串类型 CHAR(n) -- 定长字符串，不足补空格 VARCHAR(n) -- 变长字符串，有长度限制（最常用） TEXT -- 不限长度字符串（无性能损失） 经验：不要被 CHAR 的&amp;quot;性能优势&amp;quot;迷惑。在 PostgreSQL 中，VARCHAR 和 TEXT 几乎没有性能差异。大多数场景直接使用 TEXT 最省心。如果需要限制长度，用 VARCHAR(n)。</description>
    </item>
    <item>
      <title>SQL 数据分析</title>
      <link>/posts/2025/01/sql-for-data-analysis/</link>
      <pubDate>Sat, 11 Jan 2025 00:00:00 +0000</pubDate>
      <guid>/posts/2025/01/sql-for-data-analysis/</guid>
      <description>Pandas 很强大，但现实世界中大部分数据都存放在关系型数据库里。无论你是从数据仓库取数、查询业务系统，还是做报表，SQL 都是数据分析师最核心的技能之一。&#xA;这篇文章不讲 DBA 那一套（建表、索引优化、事务管理），而是聚焦于数据分析师最常用的 SQL 操作，并用 SQLite 作为实践环境，配合 Python 打通数据链路。&#xA;环境准备 import sqlite3 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # 创建内存数据库 conn = sqlite3.connect(&amp;#39;:memory:&amp;#39;) cursor = conn.cursor() 我们创建三张模拟的业务表：&#xA;# 用户表 cursor.execute(&amp;#39;&amp;#39;&amp;#39; CREATE TABLE users ( user_id INTEGER PRIMARY KEY, name TEXT, age INTEGER, city TEXT, signup_date TEXT ) &amp;#39;&amp;#39;&amp;#39;) # 订单表 cursor.execute(&amp;#39;&amp;#39;&amp;#39; CREATE TABLE orders ( order_id INTEGER PRIMARY KEY, user_id INTEGER, product TEXT, amount REAL, quantity INTEGER, order_date TEXT, status TEXT ) &amp;#39;&amp;#39;&amp;#39;) # 产品表 cursor.</description>
    </item>
  </channel>
</rss>
