Mysql 奇怪(未知)的行为 < >我想我有一个数据库,其中有一个表调用它是表A。 表A的Id为int,sum为int。 Supose我希望表A的和值大于和值的平均值

Mysql 奇怪(未知)的行为 < >我想我有一个数据库,其中有一个表调用它是表A。 表A的Id为int,sum为int。 Supose我希望表A的和值大于和值的平均值,mysql,database,Mysql,Database,为此,我提出了两个问题: 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,第二个查询的结果

为此,我提出了两个问题:

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


我的问题很简单,第二个查询中是否存在逻辑错误?如果是,有人能解释一下原因吗?

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

但在第二个查询中,在这种情况下,您将获得单个a.id的平均值

执行这个你就会明白我的意思

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

这意味着在第二次查询中,我将一个表的结果集与另一个表的结果集进行比较,而不是与它的结果集进行比较?在第二次查询中,使用group by,它将使用a.id对每个组进行分组,然后取每个组的平均值,这样平均值将等于它的值value@HasS请检查并让我知道这是真的,我做了一个简单的测试,试图比较大于或等于它的值,结果是从GROUPBY子句中获得的所有值,正如您上面解释的:D Thnx作为您的答案