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 会更有效率。
我需要 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 会更有效率。