子查询(二)
本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 39 课,共 72 课。
子查询主要有三种类型:
- 标量子查询:返回单个值(一行一列)
- 行子查询:返回一行多列
- 表子查询:返回多行多列
例如,以下是每种子查询类型的一些使用场景:
标量子查询:查找薪水高于平均薪水的员工:
SELECT name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);行子查询:查找部门和工资都与 Alice 相同的员工
SELECT name
FROM employees
WHERE (department, salary) = (
SELECT department, salary
FROM employees
WHERE name = 'Alice'
);表子查询:显示部门及其员工人数
SELECT department, count
FROM (
SELECT department, COUNT(*) as count
FROM employees
GROUP BY department
) as dept_counts;注意使用场景:
- 标量 - 简单比较(>、<、=)
- 当你需要匹配多列时
- 当你需要从结果集中查询时
挑战
简单可用的表和列:
shop:price、quantity、category、list_date
找出总数量大于 shop 中所有数量平均值的类别。返回 category 和总数量,并将总数量命名为 total_quantity。
重要:你必须在 HAVING 子句中使用子查询来计算平均值。不要使用硬编码的值或单独的查询:子查询应直接在 HAVING 中从 shop 表计算 AVG(quantity)。
解题步骤:
- 首先,编写一个子查询,计算 shop 中所有数量的平均值:
SELECT AVG(quantity) FROM shop - 然后,对每个类别的数量求和,并使用
HAVING关键字与这个子查询的结果进行比较
亲手试试
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: SQL 在线编辑器