栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL多个子查询与整个查询

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL多个子查询与整个查询

由于这三个聚合来自具有相同

WHERe
条件的同一张表,因此您无需进行子选择。所有这三个聚合都在相同的行分组上进行操作(未
GROUPBY
指定,因此整个表为一行),因此它们都可以
SELECt
直接存在于列表中。

SELECT  SUM(number) AS number_sum,  MAX(number) AS number_max,  MIN(number) AS number_minFROM `table`

如果任何聚合需要基于不同的条件

WHERe
,那么您将在子句中进行过滤,那么您将需要为不同的条件使用子选择,或者进行笛卡尔联接。
LEFTJOIN
对于仅返回一行的聚合,此子选择和以下方法应等效,在性能方面:

SELECt    (SELECT SUM(number) FROM `table` WHERe `somecolumn` = `somevalue`) AS number_sum,  MAX(number) AS number_max,  MIN(number) AS number_minFROM `table`

或等同于上面的查询,您可以

LEFT JOIN
针对
不带
ON
子句_的子查询。仅当您知道子查询将仅返回一行时,才应执行此操作。否则,您将得到笛卡尔乘积-连接一侧返回的行数 _乘以
另一侧返回的行数。

这是方便,如果你需要用一组返回几列

WHERe
条款及有几列一组不同的
WHERe
条件,但只有 一个
从每个边行
JOIN
。在这种情况下,与使用相同子句
JOIN
进行 两个子 选择相比,它应该更快
WHERe

这应该更快。

SELECt    subq.number_sum_filtered,  subq.number_max_filtered,    MAX(`table`.number) AS number_max,  MIN(`table`.number) AS number_minFROM  `table`  LEFT JOIN (    SELECt        SUM(number) AS number_sum_filtered,       MAX(number) AS number_max_filtered    FROM `table`    WHERe `somecolumn = `somevalue`  ) subq 

比这个…

SELECt    (SELECT SUM(number) FROM `table` WHERe `somecolumn` = `somevalue`) AS number_sum_filtered,  (SELECt MAX(number) FROM `table` WHERe `somecolumn` = `somevalue`) AS number_max_filtered,  MAX(`table`.number) AS number_max,  MIN(`table`.number) AS number_minFROM  `table`


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456097.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号