◯ 免费:每天5次 • 重置倒计时 16h 13m
开发 & 技术

SQL 查询生成器

用简洁的英文描述您的需求,即可获得针对 PostgreSQL、MySQL、SQLite、SQL Server、BigQuery 或 Snowflake 的正确、可读的 SQL 查询——遵循您的模式,且每个子句都有解释,并提供索引和性能的说明。

了解更多

SQL 查询生成器将一个问题——“2025 年各国家的月收入,仅限订单超过三笔的客户”——转换为针对您所使用的数据库(PostgreSQL、MySQL 与 MariaDB、SQLite、SQL Server、BigQuery 或 Snowflake)的查询。粘贴您的表和列,查询会使用这些名称;若模式留空,则会说明其假设。您可以选择风格(可读的 CTE、紧凑或带窗口函数的分析型)以及解释的详细程度,每个答案都会以结果形状和提升性能的索引结束。除非您明确要求,否则它永远不会生成破坏性语句。

0 / 4000
0 / 10000

✓ 免费使用——无需注册,无需信用卡。

所有用户

按国家划分的月度收入,仅限活跃客户

使用 HAVING 方式过滤客户的财务报表

查看输入和输出预览

输入

查询应返回什么?
Monthly revenue per country for 2025, counting only customers who placed more than 3 orders in 2025. Sort by month, then revenue descending.
表和列(可选)
orders(id, customer_id, total_cents integer, created_at timestamp) customers(id, country text, signup_at timestamp)
SQL 方言
PostgreSQL
查询风格
可读(CTE,每行一个子句)
说明
简要

输出(节选)

```sql
WITH active_customers AS (
  SELECT o.customer_id
  FROM orders AS o
  WHERE o.created_at >= DATE '2025-01-01'
    AND o.created_at <  DATE '2026-01-01'
  GROUP BY o.customer_id
  HAVING COUNT(*) > 3
)
SELECT
  DATE_TRUNC('month', o.created_at)::date AS month,
  c.country,
  SUM(o.total_cents) / 100.0            AS revenue
FROM orders AS o
JOIN active_customers AS a ON a.customer_id = o.customer_id
JOIN customers        AS c ON c.id = o.customer_id
WHERE o.created_at >= DATE '2025-01-01'
  AND o.created_at <  DATE '2026-01-01'
GROUP BY 1, 2
ORDER BY month, revenue DESC;
```

**使用给定的模式。**

CTE 找出 2025 年订单超过三笔的客户;主查询仅保留这些客户的订单,将每笔订单截取到月份并按月度和国家汇总收入。日期范围为左闭右开,因此 12 月 31 日只计入一次…
开发者

每位客户的最新订单

使用窗口函数的查询,取代相关子查询

查看输入和输出预览

输入

查询应返回什么?
For every customer, their most recent order with its total and date.
表和列(可选)
orders(id, customer_id, total_cents integer, created_at timestamp) customers(id, email text)
SQL 方言
MySQL / MariaDB
查询风格
分析型(在适用时使用窗口函数)
说明
详细(逐子句)

输出(节选)

```sql
WITH ranked AS (
  SELECT
    o.customer_id,
    o.id          AS order_id,
    o.total_cents,
    o.created_at,
    ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.created_at DESC, o.id DESC) AS rn
  FROM orders AS o
)
SELECT c.id AS customer_id, c.email, r.order_id, r.total_cents / 100.0 AS total, r.created_at
FROM customers AS c
JOIN ranked AS r ON r.customer_id = c.id AND r.rn = 1
ORDER BY r.created_at DESC;
```

**使用给定的模式。**

| 子句 | 作用 |
|---|---|
| `ROW_NUMBER() OVER (PARTITION BY … ORDER BY created_at DESC, id DESC)` | 为每个客户的订单按最新顺序编号;使用 id 作为平局分割,使结果确定性 |
| `JOIN ranked … AND r.rn = 1` | 每位客户仅保留一行 |
| …

你的 SQL 查询生成器 结果将显示在这里

你将得到带注释的整洁代码块,以及对改动内容的简短说明。

如何使用 SQL 查询生成器

  1. 像向同事提问一样写出问题:哪些行、哪些过滤条件、如何分组、如何排序。
  2. 如果已有表和列,请粘贴它们——每行一个表,列名用括号括起。查询会使用你的真实名称,无需编辑。
  3. 选择你使用的方言;日期函数、LIMIT 与 TOP 以及引用方式在 PostgreSQL、MySQL、SQLite、SQL Server、BigQuery 和 Snowflake 之间各不相同。
  4. 在学习或审查他人请求时选择“详细”解释;当你已经明确需求时选择“仅查询”。

使用案例

1

在不等待数据团队的情况下,直接回答分析师的业务问题

2

将报表请求转换为符合数据仓库真实模式的查询

3

将慢查询改写为可读的 CTE 版本,并附上所需索引

4

迁移时将查询从 MySQL 转换为 PostgreSQL 或 BigQuery

5

在执行 UPDATE 或 DELETE 前,先草拟 SELECT 预览将影响的记录

最佳结果的技巧

  • 在模式中包含列类型(created_at timestamp,total_cents integer),查询即可正确处理日期和金额。
  • 明确使用“仅”和“至少”——“客户订单超过 3 笔”应写成 HAVING 子句,而不是 WHERE。
  • 针对仪表盘,要求使用分析式写法:窗口函数可避免导致报表慢的自连接。
  • 阅读性能章节;其中列出了将全表扫描转为索引查找的索引名称。

常见问题

支持哪些数据库?

PostgreSQL、MySQL 与 MariaDB、SQLite、SQL Server(T‑SQL)、BigQuery 和 Snowflake。查询会使用对应方言的函数和语法——日期截断、LIMIT 或 TOP、引用方式以及字符串聚合均不同,输出也针对所选方言。

我必须粘贴模式吗?

不必,但提供会更有帮助。若有模式,查询会使用你的精确表名和列名,无需编辑。若没有,工具会假设一个最小可行的模式,并在解释上方列出所有假设,方便你进行修正。

它会生成 DELETE 或 UPDATE 吗?

仅在你明确要求进行修改时才会生成。即便如此,它也会将语句包装在事务中,并先给出预览受影响行的 SELECT,方便你在提交前检查。

它如何处理日期和金额?

日期使用对应方言的原生截断和比较函数,范围采用左闭右开区间,避免重复计入同一天。金额以整数分(cents)存储,保持整数形式直至最终除法,结果结构会指明每列的单位。

查询一定快速吗?

查询首先保证正确,其次追求可读性,每个答案都会给出能提升速度的索引以及可能导致索引失效的结构。请在实际数据量上运行后再安排调度——只有你的数据库知道统计信息。

🔒
您的隐私受到保护

我们会将您的输入和结果保存最多 90 天,用于运行服务、防止滥用,以及在您登录时显示您的历史记录。这些内容由我们隐私政策中列出的 AI 服务商处理。我们不会出售这些内容。

相关工具

试用此智能体

品牌构建师生成品牌名称、创建标语、撰写品牌故事并定义品牌规范。试用此智能体 →

相关工作流

发布长视频创意→脚本→缩略图→一次性上传元数据运行工作流 →

阅读更多