奇怪(未知)MySql行为

时间:2016-07-01 13:56:08

标签: mysql database

好的,考虑我有一个数据库,只有一个表调用表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。

我的问题很简单,第二次查询是否存在逻辑错误?如果是,有人可以解释原因吗?

1 个答案:

答案 0 :(得分:3)

是的,这两个查询不相等。因为在第一个查询中,您将它们视为两个单独的表并获取结果集并最终进行比较。

但是在第二次查询中你执行的聚合函数在这种情况下你会得到单个a.id的平均值

执行此操作,您将明白我的意思

Select a.id from TableA a where a.sum = (Select avg(a.sum)) group by a.id;