SQL:使用WHERE和OVER()语句筛选表
我正在使用SQL Server,我的数据库中有下表exampleTable: 示例组 示例名称 示例值 A. 名称1 100 B 姓名2 500 C 名字3 300 B 名字4 700 A. 名字5 500 C 名字6 600 您需要一个子查询:SQL:使用WHERE和OVER()语句筛选表,sql,sql-server,Sql,Sql Server,我正在使用SQL Server,我的数据库中有下表exampleTable: 示例组 示例名称 示例值 A. 名称1 100 B 姓名2 500 C 名字3 300 B 名字4 700 A. 名字5 500 C 名字6 600 您需要一个子查询: SELECT c.* FROM (SELECT Continent, Name, SurfaceArea, AVG(SurfaceArea) OVER (PARTITION BY Continent) AS AvgPerCon
SELECT c.*
FROM (SELECT Continent, Name, SurfaceArea,
AVG(SurfaceArea) OVER (PARTITION BY Continent) AS AvgPerContinent
FROM country c
) c
WHERE SurfaceArea > AvgPerContinent;
WHERE子句中不允许使用窗口函数。原因很简单:如果有多个WHERE条件,那么窗口函数是在其他过滤器之前还是之后处理?无需回答:不允许使用语法。不能在where子句中使用窗口函数。但您可以在子查询中使用它,如下所示:
select * from
(
SELECT
Continent, Name, SurfaceArea,
AVG(SurfaceArea) OVER (PARTITION BY Continent) AS AvgPerContinent,
AVG(SurfaceArea) OVER (PARTITION BY Continent) AS avgSurfaceArea
FROM country
)t
where SurfaceArea>avgSurfaceArea
从示例表中:
示例组
示例名称
示例值
集团平均
A.
名字5
500
300
B
名字4
700
600
C
名字6
600
450
不能在WHERE中使用聚合函数。您需要先使用CTE/子查询。谢谢!顺便说一句:对不起,我更正了我声明中的变量错误,现在应该更清楚了。对不起,我更正了我声明中的变量错误,现在应该更清楚了。很高兴知道你得到了答案。最好的智者。
create table exampleTable( exampleGroup varchar(20),exampleName varchar(20),exampleValue int);
insert into exampleTable values('A', 'name1' ,100);
insert into exampleTable values('B', 'name2' ,500);
insert into exampleTable values('C', 'name3' ,300);
insert into exampleTable values('B', 'name4' ,700);
insert into exampleTable values('A', 'name5' ,500);
insert into exampleTable values('C', 'name6' ,600);
select * from
(
SELECT
examplegroup, examplename, examplevalue,
AVG(examplevalue) OVER (PARTITION BY examplegroup) AS groupavg
FROM exampleTable
)t
where examplevalue>groupavg
GO