Interview AiBoxInterview AiBox 实时 AI 助手,让你自信应答每一场面试
请编写一个SQL查询语句,要求使用分组查询、添加聚合函数,并将结果按升序排序。
题型摘要
SQL查询语句需要结合GROUP BY分组、聚合函数(如COUNT、SUM、AVG等)和ORDER BY排序。一个完整示例是:按产品类别分组,计算每个类别的销售总额和平均订单金额,并按销售总额升序排序。SQL执行顺序为:FROM→WHERE→GROUP BY→聚合函数→HAVING→SELECT→ORDER BY。
SQL查询语句:分组查询、聚合函数与排序
SQL基础知识
SQL(Structured Query Language)是用于管理关系数据库的标准语言。在数据分析中,分组查询、聚合函数和排序是常用的操作,可以帮助我们从数据中提取有意义的汇总信息。
分组查询(GROUP BY)
分组查询允许将数据按照一个或多个列进行分组,然后对每个组应用聚合函数。这是数据分析中非常强大的功能。
SELECT column1, column2, aggregate_function(column3)
FROM table_name
WHERE condition
GROUP BY column1, column2;
常用聚合函数
| 函数 | 描述 | 示例 |
|---|---|---|
| COUNT() | 计算行数 | COUNT(*) |
| SUM() | 计算总和 | SUM(sales_amount) |
| AVG() | 计算平均值 | AVG(price) |
| MAX() | 找出最大值 | MAX(order_date) |
| MIN() | 找出最小值 | MIN(quantity) |
排序(ORDER BY)
排序用于对结果集进行排序,可以按升序(ASC)或降序(DESC)排列。
SELECT column1, column2
FROM table_name
ORDER BY column1 ASC, column2 DESC;
完整示例
假设我们有一个销售数据库,包含订单信息,需要按产品类别分组,计算每个类别的销售总额和平均订单金额,并按销售总额升序排序。
SELECT
product_category,
SUM(sales_amount) AS total_sales,
AVG(sales_amount) AS average_order,
COUNT(*) AS order_count
FROM
orders
WHERE
order_date >= '2023-01-01'
GROUP BY
product_category
HAVING
COUNT(*) > 5
ORDER BY
total_sales ASC;
代码解释
SELECT子句:选择要显示的列,包括产品类别和三个聚合函数的结果FROM子句:指定数据来源表为ordersWHERE子句:过滤条件,只选择2023年以来的订单GROUP BY子句:按产品类别分组HAVING子句:对分组结果进行过滤,只保留订单数量大于5的类别ORDER BY子句:按销售总额升序排序结果
SQL查询执行流程
更多示例
示例1:员工部门统计
-- 按部门统计员工数量和平均工资,并按员工数量升序排序
SELECT
department_id,
COUNT(*) AS employee_count,
AVG(salary) AS average_salary
FROM
employees
GROUP BY
department_id
HAVING
COUNT(*) > 10
ORDER BY
employee_count ASC;
示例2:产品销售分析
-- 按产品和年份统计销售情况,并按总销售额升序排序
SELECT
product_name,
YEAR(order_date) AS order_year,
SUM(quantity * unit_price) AS total_revenue,
COUNT(DISTINCT customer_id) AS unique_customers
FROM
order_details
JOIN
orders ON order_details.order_id = orders.order_id
GROUP BY
product_name, YEAR(order_date)
ORDER BY
total_revenue ASC;
最佳实践
- 选择合适的分组列:确保分组列能够提供有意义的分组
- 使用HAVING过滤分组:不要将分组过滤条件放在WHERE子句中
- 合理使用聚合函数:根据分析需求选择适当的聚合函数
- 注意NULL值处理:聚合函数通常忽略NULL值,但COUNT(*)除外
- 为列使用别名:提高结果的可读性
常见错误
- 在SELECT子句中包含未分组的非聚合列
- 在WHERE子句中使用聚合函数(应使用HAVING)
- 忘记指定排序方向(默认为ASC)
- 在GROUP BY子句中使用列别名
参考资料
思维导图
Interview AiBoxInterview AiBox — 面试搭档
不只是准备,更是实时陪练
Interview AiBox 在面试过程中提供实时屏幕提示、AI 模拟面试和智能复盘,让你每一次回答都更有信心。
AI 助读
一键发送到常用 AI
SQL查询语句需要结合GROUP BY分组、聚合函数(如COUNT、SUM、AVG等)和ORDER BY排序。一个完整示例是:按产品类别分组,计算每个类别的销售总额和平均订单金额,并按销售总额升序排序。SQL执行顺序为:FROM→WHERE→GROUP BY→聚合函数→HAVING→SELECT→ORDER BY。
智能总结
深度解读
考点定位
思路启发
相关题目
在用户信息管理场景下,为什么选择使用Redis而不是其他存储方案?
在用户信息管理场景下选择Redis的主要原因包括:1)高性能内存操作满足低延迟需求;2)丰富的数据结构(Hash、Set、List等)适配多样化用户数据;3)单线程模型高效处理高并发;4)原子操作保证数据一致性;5)灵活的持久化策略平衡性能与安全;6)发布/订阅模式实现实时通知;7)过期时间支持自动清理临时数据;8)主从复制和分片支持水平扩展。相比MySQL、MongoDB、Memcached等方案,Redis在用户信息管理场景中提供了更全面、高效的解决方案。
你使用过哪些数据库?请分别介绍它们的特点和使用场景。
数据库主要分为关系型数据库(SQL)、NoSQL数据库、时序数据库和搜索引擎四大类。关系型数据库如MySQL、PostgreSQL适合事务性应用和结构化数据;NoSQL数据库如MongoDB、Redis适合大数据和高并发场景;时序数据库如InfluxDB、Prometheus适合监控和IoT数据;搜索引擎如Elasticsearch适合全文搜索和日志分析。选型时需考虑数据结构、查询模式、扩展需求、一致性要求、性能需求、可用性要求、运维复杂度和成本因素。
请解释SQL中左连接和右连接的区别
SQL中左连接(LEFT JOIN)返回左表所有记录及右表匹配记录,不匹配时右表字段为NULL;右连接(RIGHT JOIN)返回右表所有记录及左表匹配记录,不匹配时左表字段为NULL。两者可通过交换表顺序相互转换,左连接更常用。选择哪种连接取决于查询需求:需要保留左表全部数据用左连接,需要保留右表全部数据用右连接。
请介绍一下你对数据库的理解以及在运维工作中如何应用数据库技术?
数据库是运维工作的核心组件,用于存储、管理和检索各类运维数据。运维工作中,数据库主要应用于配置管理、监控告警、日志管理、资产管理和自动化运维等场景。有效的数据库管理包括部署配置、性能优化、容量规划、高可用设计和灾难恢复等方面。运维工程师需掌握数据库故障排查、性能调优、备份恢复和安全实践等技能,以确保系统稳定可靠运行。
Redis为什么在高并发情况下性能很好?
Redis在高并发情况下性能优异的主要原因包括:基于内存的存储(纳秒级访问速度)、单线程模型(避免线程切换和锁竞争)、I/O多路复用技术(高效处理并发连接)、高效的数据结构(如SDS、哈希表、跳跃表等)、优化的持久化机制(RDB和AOF)、简单的RESP协议以及管道技术。这些特性使Redis能够轻松处理每秒数十万次的读写请求,非常适合作为缓存系统、计数器、排行榜、分布式锁等高并发场景的解决方案。