467 words
2 minutes
分组与筛选;聚合函数;子查询
2025-06-28

https://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial

📌 核心函数与运算符#

关键词定义使用场景示例
CONCAT()连接字符串组合文本和计算结果CONCAT(ROUND(ratio*100), '%') → '25%'
%1. 数学取模
2. 百分比符号
1. 奇偶判断
2. 显示百分比
1. population % 2 = 0(偶人口)
2. 11%(最终显示格式)

🔍 分组与筛选#

子句定义执行顺序使用场景示例
GROUP BY按列分组2分组统计SELECT continent, COUNT(*) FROM world GROUP BY continent
HAVING筛选分组后的结果3对聚合结果过滤HAVING AVG(population) > 10000000(筛选平均人口>1000万的洲)
WHERE筛选原始数据行1聚合前的数据过滤WHERE continent = 'Europe'(仅处理欧洲国家)

执行顺序WHERE → GROUP BY → HAVING

📊 聚合函数#

函数定义使用场景示例
COUNT()统计行数计算数量COUNT(*)(总行数)
SUM()求和计算总和SUM(gdp)(GDP总和)
AVG()求平均值计算平均水平AVG(population)(平均人口)
MAX()求最大值找最高值MAX(life_expectancy)(最长寿命)
MIN()求最小值找最低值MIN(area)(最小面积)

🔄 子查询 (Subqueries)#

类型定义使用场景示例
标量子查询返回单个值作为比较对象或计算参数SELECT name FROM world WHERE population > (SELECT population FROM ...)
列子查询返回一列值IN搭配使用SELECT name FROM world WHERE continent IN (SELECT continent FROM ...)
关联子查询引用外部查询的子查询复杂的分组比较SELECT name FROM world w1 WHERE population > (SELECT AVG(population) FROM world w2 WHERE w2.continent = w1.continent)

🧩 关键技巧总结#

  1. 去重显示 → 用 DISTINCT
    SELECT DISTINCT continent FROM world
2. **百分比计算** → 子查询 + 数学运算
```sql
100 * population / (SELECT population FROM world WHERE name='Germany')
  1. 条件排序 → CASE + ORDER BY
ORDER BY CASE WHEN name IN ('A','B') THEN 0 ELSE 1 END
  1. 范围筛选 → 双子查询比较
WHERE population BETWEEN (SELECT ...) AND (SELECT ...)
  1. 分组后筛选 → GROUP BY + HAVING
    SELECT continent
    FROM world
    GROUP BY continent
    HAVING COUNT(*) > 10
分组与筛选;聚合函数;子查询
https://fishlet.top/posts/sql_learning_note_3/
Author
Ember
Published at
2025-06-28
License
CC BY-NC-SA 4.0