Menu
CoddyTech

子查询(二)

本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 39 课,共 72 课。

子查询主要有三种类型:

  1. 标量子查询:返回单个值(一行一列)
  2. 行子查询:返回一行多列
  3. 表子查询:返回多行多列

例如,以下是每种子查询类型的一些使用场景:

标量子查询:查找薪水高于平均薪水的员工:

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;

注意使用场景:

  • 标量 - 简单比较(>、<、=)
  • 当你需要匹配多列时
  • 当你需要从结果集中查询时
challenge icon

挑战

简单

可用的表和列:

  • shop:price、quantity、category、list_date

找出总数量大于 shop 中所有数量平均值的类别。返回 category 和总数量,并将总数量命名为 total_quantity。

重要:你必须在 HAVING 子句中使用子查询来计算平均值。不要使用硬编码的值或单独的查询:子查询应直接在 HAVING 中从 shop 表计算 AVG(quantity)。

解题步骤:

  1. 首先,编写一个子查询,计算 shop 中所有数量的平均值:SELECT AVG(quantity) FROM shop
  2. 然后,对每个类别的数量求和,并使用 HAVING 关键字与这个子查询的结果进行比较

亲手试试

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: SQL 在线编辑器