我想知道是否可以像下面一样进行查询.
我有一个包含id 和的表value.Exapmle:
table EXAMPLE
|id | value |
| 1 | 65|
| 2 | 13|
| 3 | 22|
Run Code Online (Sandbox Code Playgroud)
我想要的是使得返回集合的查询如下:
|id | value | average | difference|
| 2 | 13| 33.3| 20.3|
| 3 | 22| 33.3| 11.3|
Run Code Online (Sandbox Code Playgroud)
问题是如何处理不同的栏目?
还有一个问题:如何在集合中仅包含比平均值更少或更大的值,
SELECT id,
value,
(SELECT AVG(value) FROM EXAMPLE ) as average
having
value < average.
Run Code Online (Sandbox Code Playgroud)
我使用的原因having,而不是where在于where选择,因此我不能在它使用平均(平均被计算在查询执行的选择阶段)执行之前.
我还怀疑我不仅计算一次AVG(值),而且计算表中的每一行.我对吗 ?如果我,那是非常糟糕的,这肯定不是我想要的.
关于子查询的MySQL执行顺序,请给我一些启示,或者为这个主题分享一些链接.先感谢您.
您必须单独计算总体平均值并强制交叉连接:
select
id,
value,
avgValue,
avgValue - value as Diff
from
table1
cross join
(
select
avg(value) as AvgValue
from
table1
) t2
where
value < avgValue
Run Code Online (Sandbox Code Playgroud)