Menu
CoddyTech

用 WITH 关键字简化查询

Coddy 高级 SQL 课程的第 2 课,共 13 课。

添加太多内部查询会让查询变得很复杂。例如,下面是一个包含多个子查询的查询:

SELECT * FROM table1
WHERE col2 IN (
	SELECT col1 FROM table2
	WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN (
		SELECT col5 FROM table3
		WHERE col1 AND col3 OR col2
	)
)

为了简化查询,我们可以使用 WITH query_name AS (...) 关键字。它可以让我们给查询命名并保存,然后在需要的地方使用:

WITH query1 AS (
	SELECT col5 FROM table3
	WHERE col1 AND col3 OR col2
), query2 AS (
	SELECT col1 FROM table2
	WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN query1
)
SELECT * FROM table1
WHERE col2 IN query2 AND col4 IN query1

这里我们在 query2 和主查询中重复使用了 query1。

challenge icon

挑战

简单

设备的质量由 (width/height)*num_features 衡量。

我们想找出所有被低估的设备。获取所有 opinion 高于质量平均值且 score 低于平均质量的设备。

要解决这个问题,请使用 WITH 子句创建一个用于计算平均质量的子查询,并在主查询中重复使用它。

亲手试试

高级 SQL中的所有课

自己练习: Python 在线编译器