MySQL基础【语句执行顺序】

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

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

题意就是:找出哪些只逛超市不买单的人(买单0元也算哦,可能是使用的是代金券吧)

看到此题关键找出两个数据 参观过的人 和 买单的人 他们的差就是白嫖的人(支付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进行过滤

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值