当前位置: 首页 > wzjs >正文

怎样做网站全屏代码百度软件商店

怎样做网站全屏代码,百度软件商店,lnmp搭建后怎么做网站,做网站如何让盈利目录 文章目标 🧩 背景回顾:SQL 的执行顺序 示例对比 ✅ ON 应该只管:这两行能不能配对 ✅ 正确做法:把过滤放在 WHERE 🔬 实验演示:ON vs. WHERE 的影响 总结: 🏁 最终推荐…

目录

文章目标

🧩 背景回顾:SQL 的执行顺序

示例对比

✅ ON 应该只管:这两行能不能配对

✅ 正确做法:把过滤放在 WHERE 

🔬 实验演示:ON vs. WHERE 的影响

总结:

 🏁 最终推荐 SQL 写法


文章目标

我们要解决的问题是:

在 JOIN 查询中,哪些条件写在 ON 后面,哪些写在 WHERE 后面?为什么?

这个问题,初看像语法细节,实则深藏两个重要概念:

  • SQL 执行顺序(JOIN → WHERE)

  • 条件的语义(配对 vs. 过滤)

🧩 背景回顾:SQL 的执行顺序

在一条 SQL 中,执行步骤大致如下:

  1. FROMJOIN:把多个表合并,按 ON 的规则配对行

  2. WHERE:对配对成功的行进行行级过滤

  3. GROUP BY:对通过筛选的行进行分组

  4. SELECT:选出你需要的字段

  5. ORDER BY / LIMIT

所以:

ON 作用在连接阶段,是“决定哪些行要配成一对”

WHERE 是后续过滤,是“已经 JOIN 上了,选谁要留下” 

示例对比

我们仍以Leecode上的一道题来分析。这道题的思路讲解可以看我之前的文章:

思路解析:第一性原理解 SQL-CSDN博客

表: Activity

+----------------+---------+
| Column Name    | Type    |
+----------------+---------+
| machine_id     | int     |
| process_id     | int     |
| activity_type  | enum    |
| timestamp      | float   |
+----------------+---------+

 

该表展示了一家工厂网站的用户活动。
(machine_id, process_id, activity_type) 是当前表的主键(具有唯一值的列的组合)。
machine_id 是一台机器的ID号。
process_id 是运行在各机器上的进程ID号。
activity_type 是枚举类型 ('start', 'end')。
timestamp 是浮点类型,代表当前时间(以秒为单位)。
'start' 代表该进程在这台机器上的开始运行时间戳 , 'end' 代表该进程在这台机器上的终止运行时间戳。
同一台机器,同一个进程都有一对开始时间戳和结束时间戳,而且开始时间戳永远在结束时间戳前面。

现在有一个工厂网站由几台机器运行,每台机器上运行着 相同数量的进程 。编写解决方案,计算每台机器各自完成一个进程任务的平均耗时。

完成一个进程任务的时间指进程的'end' 时间戳 减去 'start' 时间戳。平均耗时通过计算每台机器上所有进程任务的总耗费时间除以机器上的总进程数量获得。

结果表必须包含machine_id(机器ID) 和对应的 average time(平均耗时) 别名 processing_time,且四舍五入保留3位小数。

以 任意顺序 返回表。(来源:Leecode)

SELECT machine_id, ROUND(AVG(t2.timestamp - t1.timestamp), 3) AS processing_time
FROM Activity t1
JOIN Activity t2ON t1.machine_id = t2.machine_idAND t1.process_id = t2.process_idAND t1.activity_type = 'start'AND t2.activity_type = 'end'
GROUP BY machine_id;

这段代码可以运行,但不严谨。原因如下:

ON 应该只管:这两行能不能配对

这些条件是合理的 ON 条件:

ON t1.machine_id = t2.machine_id
AND t1.process_id = t2.process_id

解释:我们只配同一机器、同一进程的事件,没错。

❌ 不推荐在 ON 中写:

AND t1.activity_type = 'start'
AND t2.activity_type = 'end'

为什么?

  • 你想过滤的是:t1 是 start,t2 是 end

  • 这是你的业务逻辑,不是连接逻辑

  • 放在 ON 会影响 JOIN 结果集(可能 JOIN 失败),而非只是筛选

✅ 正确做法:把过滤放在 WHERE 

FROM Activity t1
JOIN Activity t2ON t1.machine_id = t2.machine_idAND t1.process_id = t2.process_id
WHERE t1.activity_type = 'start'AND t2.activity_type = 'end'

这样写的意义是:

  • 先配对所有同机同进程的记录

  • 然后从中筛出我们感兴趣的组合(startend

🔬 实验演示:ON vs. WHERE 的影响

假设 Activity 表中有:

machine_idprocess_idactivity_typetimestamp
1101start10.0
1101end20.0
1101error15.0

如果你把 'start' / 'end' 写在 ON 中:

  • JOIN 阶段只会配出 (start, end)

  • 那些 error 就永远不会参与配对

如果你写在 WHERE 中:

  • JOIN 先配出所有 (start, end)、(start, error)、(end, error) 等

  • 然后你可以灵活过滤你关心的组合

这让 SQL 更清晰、也更灵活

总结:

  • ✳️ ON“谁和谁能配成一对?”(连接规则)

  • ✳️ WHERE“配好之后,我要不要这行?”(业务逻辑)

 🏁 最终推荐 SQL 写法

SELECT machine_id, ROUND(AVG(t2.timestamp - t1.timestamp), 3) AS processing_time
FROM Activity t1
JOIN Activity t2ON t1.machine_id = t2.machine_idAND t1.process_id = t2.process_id
WHERE t1.activity_type = 'start'AND t2.activity_type = 'end'
GROUP BY machine_id;
http://www.dtcms.com/wzjs/469931.html

相关文章:

  • 人力资源网站建设计划书樱桃bt磁力天堂
  • 外贸自建站多少钱推广链接点击器app
  • 楚雄做网站建设的公司惠州seo关键词推广
  • 网站为什么百度搜不到网站网络营销推广
  • 百度竞价推广是什么搜外seo视频 网络营销免费视频课程
  • 做旅游网站的yi国内专业seo公司
  • 沈阳seo网站管理免费软件下载网站有哪些
  • 做网站要准备的资料网络营销网站平台有哪些
  • 网站开发会计分录域名申请的流程
  • 建设类似衣联网的网站百度网盘网页版登录首页
  • 做网站没有高清图片怎么办制作电商网站
  • 建德网站建设公司泉州seo代理商
  • 百度搜寻网站缩略图如何添加品牌公关公司
  • 海南网站推广建设重庆关键词seo排名
  • 即墨哪里有做网站的电商入门基础知识
  • 做网站前端用什么语言百度智能云建站
  • 南宁网站优化公司哪家好手机系统优化
  • 优质高等职业院校建设申报网站正规seo排名多少钱
  • 四川网站设计网站怎样做推广
  • 深圳网站软件开发发布软文的平台
  • 高陵网站建设百度关键词搜索热度
  • 北京网站制作公司飞沐网络营销的期末试题及答案
  • 响应式网站建设平台短视频seo优化
  • css怎么做响应式网站建站abc
  • 教人做饮料的网站网络公司名字
  • 郑州做网站hnqfu手游推广平台哪个好
  • inurl 网站建设网站seo优化检测
  • 做搜狗网站优化首页软网站关键词快速排名优化
  • 可靠的合肥网站建设百度刷seo关键词排名
  • 东莞英文网站制作企业qq手机版