hivesql中 exists 用法

有一次面试的时候,面试官问了这么一个场景题:一家门店一个月内每位顾客访问的目的可能有多种,并给到访顾客的目的打标签1、2、3、4这四类,现在要统计这家门店一个月内没有3、4标签的顾客明细。(也就是顾客到访标签只有1或者2,但凡被打过3或4标签的客户都要被排除掉)

很明显,这个场景用exists就很合适了。

先建一张表,插入几条数据,简单模拟一下这个场景

hivesql中 exists 用法

如上图,到访门店的一共四位顾客,不存在标签3、4的实际上只有顾客李四和赵六

SELECT * FROM DPM.y_cus_visit
WHERE
cus_code NOT IN (SELECT cus_code FROM DPM.y_cus_visit WHERE visit_goal IN (3,4))

这种写法是先把存在标签3、4的顾客找出来,然后在where条件做筛选排除掉。

运行结果如下:

hivesql中 exists 用法

那么用exsits 运行呢,出来的结果跟第一种写法是一样的

SELECT * FROM y_cus_visit a
WHERE NOT EXISTS (SELECT 1 FROM DPM.y_cus_visit b WHERE a.cus_code=b.cus_code
AND b.visit_goal IN (3,4));

hivesql中 exists 用法

not exists语句的执行顺序如下

1.首先会执行外循环(SELECT * FROM y_cus_visit)

2.外循环返回的结果每一行都会拿着去内层循环执行

ps:SELECT * FROM y_cus_visit 查询的为 (001,001,001,002,002,003,003,004,004);此时内循环执行顺序应该是 001 003

外循环 not exsits 内循环

那么出来只剩下002和004的数据了

Original: https://blog.csdn.net/Wflowerd/article/details/125658393
Author: Wflowerd
Title: hivesql中 exists 用法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/817730/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球