如果至少只有一条记录,我需要找到与供应商编号(SNo)相关的所有记录的平均值(Qty)

问题描述 投票:1回答:1

我需要找到与S1,S2等相关的供应商编号(SNo)的所有记录的平均数量(数量)。即使至少只有一条记录满足条件

此查询仅选择一个记录和查询平均值之前的查询条件

select Sno, avg(qty) avg_qty                                              
from Supplier                                                       
group by  sno                             
having  avg(qty) > 50 and avg(qty) < 100

这是我的桌子:

create table Supplier
(
SNo Varchar (5),
PNo Varchar (5),
JNo Varchar (5),
Qty int
)
Insert into Supplier values ('S1','P1','J1',50)
Insert into Supplier values ('S1','P1','J2',90)
Insert into Supplier values ('S1','P2','J1',40)
Insert into Supplier values ('S1','P3','J3',20)
Insert into Supplier values ('S2','P1','J3',110)
Insert into Supplier values ('S2','P2','J2',30)
Insert into Supplier values ('S2','P4','J3',10)
Insert into Supplier values ('S3','P3','J1',100)
Insert into Supplier values ('S3','P1','J3',80)
Insert into Supplier values ('S3','P4','J2',70)
Insert into Supplier values ('S4','P2','J1',60)
Insert into Supplier values ('S4','P1','J3',20)

我需要从表中选择大于50且小于100的平均数量。但是我的查询仅选择记录。但我需要将结果视为:

S1 - 50 
S3 - 83 
S4 - 40 

所以S2的数量在50到100之间。因此,应该拒绝它。

sql group-by average having
1个回答
0
投票

您需要检查HAVING子句中是否有该供应商的行满足以下条件:

select Sno, avg(qty) avg_qty                                              
from Supplier
group by  sno
having count(case when qty > 50 and qty < 100 then 1 end) > 0

请参见demo。结果:

> Sno | avg_qty
> :-- | ------:
> S1  |      50
> S3  |      83
> S4  |      40
© www.soinside.com 2019 - 2024. All rights reserved.