mysql中的派生表

派生表是从SELECT语句返回的虚拟表。派生表类似于临时表,但是在SELECT语句中使用派生表比临时表简单得多,因为它不需要创建临时表的步骤。当SELECT语句的FROM子句中使用独立子查询时,我们将其称为派生表。与子查询不同,派生表必须具有别名,以便稍后在查询中引用其名称。 如果派生表没有别名,MySQL将发出错误。


mysql派生表概述

我们首先得知道,派生表是从select语句返回的虚拟表。派生表类似于临时表,但是在SELECT语句中使用派生表比临时表简单得多,因为它不需要创建临时表的步骤。所以当SELECT语句的FROM子句中使用独立子查询时,我们将其称为派生表。


基本格式

SELECT 
    column_list
FROM
*    (SELECT 
*        column_list
*    FROM
*        table_1) derived_table_name;
WHERE derived_table_name.column > 1...


实例应用

我们有如下的统计结果

SELECT
		IF(length(A.DICT_NAME)>0,AVG( A.DICT_CODE ),0) WASTE_TYPE,
		COUNT( T.ID ) NUMBER,
		IFNULL( SUM( T.WEIGHT ), 0 ) WEIGHT,
		IFNULL( A.DICT_NAME, '总重量/总数量' ) DICT_NAME
	FROM
		t_sys_dictionary A
		LEFT JOIN t_mw_waste_material T ON T.WASTE_TYPE = A.DICT_CODE 
		AND T.ORG_CODE = '34010201'
		AND T.DEPT_CODE = '3401020101'
	WHERE
		A.DICT_TYPE = '废弃物类别' 
	GROUP BY
		A.DICT_NAME 
	WITH ROLLUP 

在这里插入图片描述

如果想对以上的结果按照number从大到小排序,应该怎么弄。mysql5.7中WITH ROLLUP 与ORDER BY是不可以一起使用的。

在这里插入图片描述
我们可以把前面的结果作为一个派生表,在派生表的基础上进行排序操作,如下所示

SELECT
	* 
FROM
	(
	SELECT
	IF
		( length( A.DICT_NAME )> 0, AVG( A.DICT_CODE ), 0 ) WASTE_TYPE,
		COUNT( T.ID ) NUMBER,
		IFNULL( SUM( T.WEIGHT ), 0 ) WEIGHT,
		IFNULL( A.DICT_NAME, '总重量/总数量' ) DICT_NAME 
	FROM
		t_sys_dictionary A
		LEFT JOIN t_mw_waste_material T ON T.WASTE_TYPE = A.DICT_CODE 
		AND T.ORG_CODE = '34010201' 
		AND T.DEPT_CODE = '3401020101' 
	WHERE
		A.DICT_TYPE = '废弃物类别' 
	GROUP BY
		A.DICT_NAME WITH ROLLUP 
	) tmp 
ORDER BY
	NUMBER DESC

在这里插入图片描述

派生表没有别名会报错,如下图所示

在这里插入图片描述


本文小结

派生表主要是用来对数据进行二次处理的,在第一次处理的结果之上进行操作。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值