【mysql】WITH AS 语法详解

【mysql】WITH AS 语法详解

WITH AS 语法是MySQL中的一种临时结果集,它可以在SELECT、INSERT、UPDATE或DELETE语句中使用。通过使用WITH AS语句,可以将一个查询的结果存储在一个临时表中,然后在后续的查询中引用这个临时表。这样可以简化复杂的查询,提高代码的可读性和可维护性。

【一】WITH AS语法的基本结构

复制代码
WITH temporary_table_name (column1, column2, ...) AS (
  SELECT column1, column2, ...
  FROM table_name
  WHERE condition
)
SELECT * FROM temporary_table_name;

其中,temporary_table_name是临时表的名称,column1, column2, ...是临时表的列名,table_name是要查询的表名,condition是筛选条件。

【二】案例1

假设我们有一个员工表(employees),包含员工的姓名、年龄和部门信息。现在我们想要查询所有年龄大于30的员工,并按照部门进行分组。我们可以使用WITH AS语句来实现这个需求:

复制代码
WITH employees_over_30 AS (
  SELECT name, age, department
  FROM employees
  WHERE age > 30
)
SELECT * FROM employees_over_30;

在这个例子中,我们首先创建了一个名为employees_over_30的临时表,将年龄大于30的员工的信息存储在其中。然后,我们在后续的查询中引用了这个临时表,按照部门进行了分组。这样可以使查询更加简洁,易于理解。

【三】案例2

下面是一个比较复杂的例子,假设我们有一个销售数据表(sales_data),包含日期(date)、产品ID(product_id)、销售额(sales)和利润(profit)。现在我们需要计算每个产品的总销售额和总利润,并按照产品ID进行分组。我们可以使用WITH AS语句来实现这个需求:

复制代码
WITH product_sales AS (
  SELECT product_id, SUM(sales) as total_sales, SUM(profit) as total_profit
  FROM sales_data
  GROUP BY product_id
),
product_sales_with_rank AS (
  SELECT product_id, total_sales, total_profit,
         RANK() OVER (ORDER BY total_sales DESC) as sales_rank,
         RANK() OVER (ORDER BY total_profit DESC) as profit_rank
  FROM product_sales
)
SELECT product_id, total_sales, total_profit,
       sales_rank, profit_rank
FROM product_sales_with_rank;

在这个例子中,我们首先使用WITH AS语句创建了一个名为product_sales的临时表,用于计算每个产品的总销售额和总利润。然后,我们创建了另一个名为product_sales_with_rank的临时表,用于计算每个产品的销售额排名和利润排名。最后,我们从product_sales_with_rank临时表中选择所需的列进行查询。

相关推荐
小白男神15 小时前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶15 小时前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G15 小时前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备15 小时前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远16 小时前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
kybs199117 小时前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_9622186117 小时前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客17 小时前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren18 小时前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安18 小时前
MySQL-触发器
数据库·mysql