0
点赞
收藏
分享

微信扫一扫

MySQL基础【语句执行顺序】

花明 04-06 10:00 阅读 1

一个SQL语句它的执行顺序对于我们思考题意有着很重要的关系

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看到此题关键找出两个数据 参观过的人 和 买单的人 他们的差就是白嫖的人(支付0元也算,这是个坑)

select v.customer_id,count(v.customer_id)-count(t.visit_id) count_no_trans 
from visits v
left join transactions t
on v.visit_id=t.visit_id
group by v.customer_id
having count_no_trans  != 0

一下是这个语句的执行顺序
FROM 子句:
首先,数据库引擎会从 Visits 表中检索数据,并将其别名为 v,以便在后续的查询中引用。

LEFT JOIN 子句:
接着,执行左连接操作,将 Visits 表中的每一行与 Transactions 表中的匹配行进行连接。这意味着从 Visits 表中获取的每个访问记录都将与 Transactions 表中的相关访问记录进行匹配。
此时会有一个临时的虚拟表,没有匹配上的值会被赋予 null,以visit表为中心(visit表中有,但transaction没有的为null)

GROUP BY 子句:
然后,根据 customer_id 列对结果集进行分组。这意味着所有具有相同 customer_id 的行将被分为一组。(左连接后的表)
与聚合语句count联合使用得出 参观者数量 和付费者数量

SELECT 子句:
最后,在分组之后,使用 SELECT 子句选择要返回的列,并对每个分组应用聚合函数 COUNT(v.customer_id),以计算每个顾客的访问次数。得出差值

HAVING 子句:
最后,使用 HAVING 子句对结果进行过滤,只保留 count_no_trans 不等于 0 的分组。
只显示白嫖者数量,付过费的不显示被过滤掉,对count的差值 = 0进行过滤

举报

相关推荐

0 条评论