首页 > 数据库 >经典sql题(九)SQL 查询详细指南总结二

经典sql题(九)SQL 查询详细指南总结二

时间:2024-09-17 17:48:35浏览次数:3  
标签:指南 JOIN users transactions sql amount user SQL id

示例

综合上一章内容,编写一个示例 SQL 查询:

SELECT DISTINCT a.user_id, COALESCE(b.amount, 0) AS amount
FROM users a
LEFT JOIN transactions b ON a.user_id = b.user_id
WHERE a.status = 'active'
GROUP BY a.user_id
HAVING COUNT(b.transaction_id) > 0
ORDER BY amount DESC
LIMIT 10;

SQL 查询的执行步骤图表说明:

  1. FROM 和 JOIN

    • 连接 users 表和 transactions 表。
    • 使用 LEFT JOIN 确保 users 表中的所有行都被保留,即使在 transactions 中没有匹配。
  2. WHERE

    • 过滤 users 表中 status'active' 的行。
  3. GROUP BY

    • 将结果按照 user_id 分组。
  4. HAVING

    • 过滤之前分组的结果,保留 transactions 表中 transaction_id 计数大于 0 的组。
  5. SELECT

    • 提取每个分组的 user_idamount(使用 COALESCENULL 值替换为 0)。
  6. ORDER BY

    • amount 降序排列结果。
  7. DISTINCT

    • 确保结果中 user_id 是唯一的。
  8. LIMIT

    • 仅返回前 10 行结果。

步骤图表

┌───────────────────────────────────────────┐
│                FROM & JOIN                │
│  users a LEFT JOIN transactions b         │
└───────────────────────────────────────────┘
                │
                ▼
┌───────────────────────────────────────────┐
│                 WHERE                     │
│           a.status = 'active'             │
└───────────────────────────────────────────┘
                │
                ▼
┌───────────────────────────────────────────┐
│               GROUP BY                    │
│              a.user_id                    │
└───────────────────────────────────────────┘
                │
                ▼
┌───────────────────────────────────────────┐
│                HAVING                     │
│     COUNT(b.transaction_id) > 0           │
└───────────────────────────────────────────┘
                │
                ▼
┌───────────────────────────────────────────┐
│                SELECT                     │
│ DISTINCT a.user_id, COALESCE(b.amount, 0) │
└───────────────────────────────────────────┘
                │
                ▼
┌───────────────────────────────────────────┐
│               ORDER BY                    │
│              amount DESC                  │
└───────────────────────────────────────────┘
                │
                ▼
┌───────────────────────────────────────────┐
│                 LIMIT                     │
│                   10                      │
└───────────────────────────────────────────┘

为了演示这条 SQL 查询的执行,可以先定义数据库表架构并插入一些示例数据。

数据库表架构

表 1:users
user_idnamestatus
1Aliceactive
2Bobinactive
3Charlieactive
4Davidactive
表 2:transactions
transaction_iduser_idamount
11100
21200
33150
44NULL

执行步骤及结果

1. FROM 和 JOIN
SELECT a.user_id, b.amount
FROM users a
LEFT JOIN transactions b ON a.user_id = b.user_id;
user_idamount
1100
1200
2NULL
3150
4NULL
2. WHERE
WHERE a.status = 'active'
user_idamount
1100
1200
3150
4NULL
3. GROUP BY
GROUP BY a.user_id
user_idamount (example aggregation)
1100, 200
3150
4NULL
4. HAVING
HAVING COUNT(b.transaction_id) > 0
user_idamount (example aggregation)
1100, 200
3150
5. SELECT & COALESCE
SELECT DISTINCT a.user_id, COALESCE(b.amount, 0) AS amount
user_idamount
1100
1200
3150
6. ORDER BY
ORDER BY amount DESC
user_idamount
1200
3150
1100
7. DISTINCT

在这个例子中已经处理。

8. LIMIT
LIMIT 10

结果与 ORDER BY 相同,因为只有 3 行。

最终结果

user_idamount
1200
3150
1100

这些步骤展示了 SQL 查询如何逐步处理数据,应用过滤、分组、排序和限制操作,最后返回所需结果。

标签:指南,JOIN,users,transactions,sql,amount,user,SQL,id
From: https://blog.csdn.net/m0_58076578/article/details/142316912

相关文章

  • 【python学习】深入掌握 Python RQ 任务队列库:全面处理异步任务的实战指南
    引言rq是基于Redis的Python任务队列库,用于处理异步任务。它能帮助开发者将繁重的后台任务交由独立进程执行,从而提高系统性能。在复杂项目中,任务的超时、重试、定时执行、依赖关系以及队列优先级等功能尤为重要。本文将全面介绍rq的常用和高级功能,帮助你在项目中灵活......
  • 概率分布深度解析:PMF、PDF和CDF的技术指南
    本文将深入探讨概率分布,详细阐述概率质量函数(PMF)、概率密度函数(PDF)和累积分布函数(CDF)这些核心概念,并通过实际示例进行说明。在深入探讨PMF、PDF和CDF之前,有必要先简要介绍两种常用的概率分布:正态分布和均匀分布。正态分布: 也称为高斯分布或钟形曲线,正态分布以其均值为中心对称......
  • 基于Java+Vue+Mysql的人力资源管理系统:简单易用,高效协同(项目源码分享)
      前言:eHR(ElectronicHumanResources)人力资源管理系统是一个综合性的软件平台,用于管理组织的人力资源相关的各种活动和数据。该系统可以显著提高人力资源部门的工作效率,确保数据准确性和一致性,同时提供决策支持。以下是eHR人力资源管理系统的六个主要模块及其功能的简要介......
  • docker下载mysql 8
    发现自己的mysql5.7有点老了,正好借此机会卸载后重新下载新的mysql8版本,也记录一下分享给大家一.打开docker1.打开目录cd/usr/local/docker/2.创建文件夹mkdir mysql3.打开文件夹cdmysql/二、创建挂载目录1.创建数据挂载目录mkdirdata2.创建配置文件目录mkdir......
  • python 提取出sql语句中where的值
    使用正则表达式来提取SQL语句中的WHERE条件的值。假设你的SQL语句格式比较标准,你可以使用以下Python代码来提取WHERE子句中的值。importredefextract_where_clause(sql_query):#使用正则表达式提取WHERE子句中的条件where_clause_pattern=re.compile(r'......
  • 通过日志恢复sql server数据库
    鱼弦:公众号:红尘灯塔,CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)通过日志恢复SQLServer数据库SQLServer提供了两种类型的日志备份:完整事务日志备份: 包含自上次完整备份以来对......
  • ​​Prometheus监控之postgresql
    1 postgres_exporterpostgres_exporter是一个开源的监控工具,专门设计用于收集和导出PostgreSQL数据库的性能指标,以便进行监控和分析。它是Prometheus监控框架的一部分,可以将收集到的数据格式化为Prometheus可以识别的格式。1.1 安装配置postgres_exporter1.1.1下载postgres_expo......
  • 【MySQL】MySQL中JDBC编程——MySQL驱动包安装——(超详解)
    前言:......
  • 云词典——基于TCP和sqlite3实现
    项目需求 功能描述      仿照有道云词典功能,实现一个自己的云词典。自行定义项目名,最终可以体现到简历中。 效果参考功能矩阵功能模块功能点功能点描述优先级备注客户端注册可实现新用户的注册功能A登录支持用户登录校验,错误给出......
  • 数据库课程设计mysql
    一、引言在线图书管理系统旨在为学校、图书馆或图书销售商提供一个集图书信息管理、借阅管理、用户管理等功能于一体的数字化平台。通过该系统,管理员可以方便地添加、删除、修改图书信息,处理借阅请求,统计借阅数据;用户则可以查询图书信息、在线借阅图书等。二、需求分析2.1......