SQL 相同的嵌套查询 table

SQL Nested query on same table

我需要 select 每个 space 一家公司的面积大于每家公司的平均面积。这是我的查询:

SELECT *
FROM Space outer
WHERE area >
( SELECT AVG (area)
FROM Space inner
WHERE outer.address = inner.address );

MySQL returns 从 area> 开始的语法错误。我知道我不应该使用地址作为主键,我不能使用 JOIN。这只是一个任务。求助

首先得出所有记录的平均值 space...

(Select avg(area) mavg from space)

这个 returns 我们可以交叉连接到所有 space 记录的单个值,然后只检查面积 > 平均值。

Select * 
from Space
cross join (Select avg(area) mavg from space) Co
where area > Co.mavg

因为我们知道派生的 table/inline 视图的结果每次只会有 1 个值,所以交叉连接不会增加被评估的行数;而 rdbms 只需计算一次平均值。

然而,这假设您想要所有记录的平均值,而不仅仅是公司的平均值。如果是公司...那么类似...

Select S.* 
from Space S
LEFT join (Select address, avg(area) mavg from space Group by address) Co
  on S.address= Co.address
where S.area > Co.mavg

这将确定公司加入的平均值返回到该公司的 space,然后将公司的每个 space 记录与公司的平均值进行比较。

由于我们不知道您如何根据数据定义公司,因此我假设了一个 "address" 字段。

不同的方法...

Select S.* 
from space S
where S.area > (Select avg(area) from space)

然而,这是假设所有公司的平均值

Select S.*
from space
where s.avg > (Select avg(area) from space S2 where S.Company = S2.company)

如果这不行,我需要查看 table space 的 DDL(结构列、数据类型 PK、FK 等)和一些示例数据。

除非每个公司区域的地址都相同....必须有一些其他标准将公司与所有其他公司记录相关联(可能是名称或一致的密钥?)

我个人认为在这种情况下使用相关子查询很慢,因为它必须计算 Space 中每条记录的平均值。交叉连接 IMO 会更有效率。