NOTEXISTS这个怎么用啊?

image.png

image.png

NOT EXISTS是不是说不包含?

SELECT * FROM test_2001

WHERE NOT EXISTS

(SELECT * FROM test_2001  WHERE age_group!=(select MAX(age_group) from test_2001))

我选择就是写的是不包含最大年龄的55岁以上的,但是我不太明白这个的用法

需求是:查询去掉最大年龄,最小年龄后人员的平均年龄,要用到NOT EXISTS

用户kCCpJ0269548 发布于 2021-9-22 14:46
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
axingLv6专家互助
发布于2022-3-29 22:49

去掉最大年龄、最小年龄,不该用字段age_group去查

直接简单一条sql可以查出

select avg(age) from test_2001 a 

where not exists(select 1 from test_2001 having max(age)=a.age and min(age)=a.age)

最佳回答
1
snrtuemcLv8专家互助
发布于2021-9-22 14:55

SELECT * FROM test_2001 a

WHERE NOT EXISTS

(SELECT * FROM test_2001  WHERE age_group!=(select MAX(age_group) from test_2001) and a.id=id)

或者

SELECT * FROM test_2001 

WHERE NOT IN

(SELECT * FROM test_2001  WHERE age_group!=(select MAX(age_group) from test_2001))

最佳回答
0
烟尘Lv6高级互助
发布于2021-9-22 14:55(编辑于 2021-9-22 14:59)

exists要看sql返回的结果集是否与前面匹配,所以exsts括号的查询要跟前面有关联

你的sql中,exists括号里的查询跟前表没有任何关联,所以出不来结果

直接判断试试

select avg(age_group) from test_2001

where age_group<>(select max(age_group) from test_2001) and age<>(select min(age_group) from test_2001)

https://www.cnblogs.com/flzs/p/11542181.html

  • 用户kCCpJ0269548 用户kCCpJ0269548(提问者) 就是要用到这个,我不用这个也可以查得到,好烦
    2021-09-22 15:44 
  • 烟尘 烟尘 回复 用户kCCpJ0269548(提问者) 既然能查到正确结果为什么还非要用exists呢?
    2021-09-22 15:45 
最佳回答
0
liu.yangLv2初级互助
发布于2021-9-23 11:50(编辑于 2021-9-23 11:51)

select avg(age_group) 

from test_2001 t

where not exists

(select 1

from 

(select 

    max(age_group) as max_aget,

    min(age_group) as min_age 

from test_2001

) t1

where t.age_group=t1.max_aget or t.age_group=t1.age_group

)

  • 5关注人数
  • 535浏览人数
  • 最后回答于:2022-3-29 22:49
    请选择关闭问题的原因
    确定 取消
    返回顶部