[sql server] 问题总结3 - 获取最大值,最小值的 not exists

本文通过示例介绍了如何在SQL Server中使用`NOT EXISTS`子句来查询每个分类的最高点击数商品。首先创建并填充了`Class`和`Products`表,然后展示了如何通过`NOT EXISTS`查询每个类别的最高点击数商品记录。同时,文章还讨论了`EXISTS`子句与`NOT EXISTS`的区别,并提供了获取最大值但不包含具体记录的方法。此外,还涉及了如何找出相同A字段下,B字段最大且C字段也最大的记录。最后,文章给出了一个处理时间相近记录的查询实例,展示如何选取同一卡号、状态且时间相差3秒内的第一条记录。
摘要由CSDN通过智能技术生成

表Class
classID  className
1        衣服
2        裤子
5        帽子
10       鞋子
表Products
ProductID     ProductName   ClassID   ClickNum(点击数)
1             男士衣服      1         90
2             女士衣服      1         85
3             男士裤子      2         30
4             女士裤子      2         45
5             男士帽子      5         66
6             女士帽子      5         10
7             男士鞋子      10        55
8             女士鞋子      10        30
求每个分类的最高点击数商品,按下面降序方式显示
ProductID    ProductName    ClickNum
1            男士衣服       90
5            男士帽子       66
7            男士鞋子       55
4            女士裤子       45      
=========================================

 

 

if object_id('Class') is not null drop table Class
create table Class(classID int,  className varchar(30))
insert into Class(classID ,  className) select 1,'衣服'
union all select 2, '裤子'
union all select 5, '帽子'
union all select 10,'鞋子'

if object_id('Products') is not null drop table Products
create table Products(ProductID int identity,    ProductName varchar(50) , ClassID int ,   ClickNum int)

insert into Products select  '男士衣服',1,90
 union all select '女士衣服',1,85
 union all select  '男士裤子',2,30
 union all select  '女士裤子',2,45
 union all select  '男士帽子',5,66
 union all select  '女士帽子',5,10
 union all select  '男士鞋子',10,55
 union all select  '女士鞋子',10,30

select * from Class

 

select *
from Products p
where not exists (select 1 from Products where ClassID = p.ClassId and ClickNum > p.ClickNum)

 

 

思路 后面的 SELECT 提取出来的是 最大的结果。 not exists 就是不排除这些记录(也就是说其他的都排除)
所以最后结果是 最大的结果

如果用 exists 就是排除这些最大的记录结果。所以得到的结果就是 除了最大的记录以外的所有记录

 

 

还有一种方法获取最大值的和最小值的,就是用 group by  和 max 或是 min 但这种结果 只能找到最大值,最小值,不能找到具体的记录。因为他是分组数据。

 

 select ClassID,max(ClickNum) as [ClickNum]   from Products group by  ClassID

ClassID     ClickNum

1     90
2     45
5     66
10   55

 

这个不能体现具体记录

 ----------------------------------------------

 

 

 


A B C
5 6 7
5 6 8
5 7 5
5 7 6
6 6 7
6 6 8
6 7 5
6 7 6

求一句sql 结果为
5 7 6
6 7 6

groupby A中相同情况 B最大中的C最大的记录

 

 

create

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值