示例
示例
SELECT t.city, t.avg_amount
FROM (
SELECT city, AVG(amount) AS avg_amount
FROM orders
GROUP BY city
) t
WHERE t.avg_amount > 500
ORDER BY t.avg_amount DESC;| 别名 | 派生表别名必须写(MySQL 强制、PG 同样要求) |
|---|---|
| 物化 | 旧版本可能整体物化,条件无法下推 |
| 替代 | 复用多次或需要索引时考虑 CTE、临时表 |
把子查询当作临时表参与连接或过滤,必须给别名;MySQL 8.0.22 起支持下推条件到派生表,旧版本可能先物化整表。
SELECT t.city, t.avg_amount
FROM (
SELECT city, AVG(amount) AS avg_amount
FROM orders
GROUP BY city
) t
WHERE t.avg_amount > 500
ORDER BY t.avg_amount DESC;| 别名 | 派生表别名必须写(MySQL 强制、PG 同样要求) |
|---|---|
| 物化 | 旧版本可能整体物化,条件无法下推 |
| 替代 | 复用多次或需要索引时考虑 CTE、临时表 |