好的,考虑我有一个数据库,只有一个表调用表A. 表A具有Id int,sum int。 我希望表A的总和值大于和值的平均值。
为此,我提出了两个问题:
SELECT
a.id
FROM
TableA a,
(SELECT AVG(sum) AS mes FROM TableA) b
WHERE
a.sum>b.mes;
SELECT
a.id
FROM
TableA a
WHERE
a.sum > (SELECT AVG(a.sum))
GROUP BY
a.id;
我看到这些查询的方式是相同的,但第一个结果为Ok,第二个结果为Null。
我的问题很简单,第二次查询是否存在逻辑错误?如果是,有人可以解释原因吗?
答案 0 :(得分:3)
是的,这两个查询不相等。因为在第一个查询中,您将它们视为两个单独的表并获取结果集并最终进行比较。
但是在第二次查询中你执行的聚合函数在这种情况下你会得到单个a.id的平均值
执行此操作,您将明白我的意思
Select a.id from TableA a where a.sum = (Select avg(a.sum)) group by a.id;