在SQL中的AS重命名与ORDER BY排序中我们知道,在SQL中可以利用AS对字段进行重命名,让查询结果更加清晰明了。
而在我们学习了SQL中的基本查询语句后,我们也会开始写稍微复杂一些的SQL语句来查询与分析数据。而在很多时候并不是所有的数据信息查询可以简单的只用一条SQL语句来完成,这其中最常见的就是嵌套查询,也就是在一个查询结果的基础上再进一步查询想要的信息。
利用WITH...AS我们可以首先把SQL中的查询结果存储在一个临时的数据表中,从而可以继续在这个数据表中更一步的查询数据。
WITH...AS
使用WITH...AS的SQL查询语句一般有如下结构:
代码语言:javascript复制WITH 临时数据表 AS
(
SELECT...
)
SELECT...
下面我们对常用的Customers数据表稍作修改: 在这个表中增加客户的订单数量Orders.
ID | CustomerName | City | Country | Orders |
---|---|---|---|---|
1 | David Horn | New York | USA | 10 |
2 | Michael Black | Berlin | Germany | 5 |
3 | Simon Rock | London | UK | 4 |
4 | Anna Setzer | Peking | China | 15 |
5 | Michael Black | Hong Kong | China | 8 |
如果想找出订单数量大于5的客户的ID,我们可以利用下面的步骤:
- 筛选出所有订单数量大于5的客户的信息,把查询结果存储在一个临时的数据表Major_Customers中
- 从Major_Customers中再查询客户的ID.
WITH Major_Customers AS
(SELECT *
FROM Customers
WHERE Orders > 5
)
SELECT ID
FROM Major_Customers
- 用户活跃度分析: WITH ActiveUsers AS (
SELECT user_id, DATE(logged_in_at) AS login_date
FROM user_activity
GROUP BY user_id, login_date
)
SELECT COUNT(DISTINCT user_id) AS daily_active_users
FROM ActiveUsers
WHERE login_date BETWEEN '2024-01-01' AND '2024-01-31';