2016-07-01 80 views
3

好吧,考虑我有一个数据库与一个表称为表A。 表A有Id int,sum int。 Supose我希望表A的总和值大于总和值的平均值。奇怪(未知)MySql行为

为此,我做了两个疑问:

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; 

的方式我认为这些查询是相同的,但结果是正常的第一和空第二。

我的问题很简单,第二个查询中是否有逻辑错误?如果是,有人可以解释为什么吗?

回答

3

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

但在第二个查询你的执行聚合函数,你会得到平均单个a.id

执行此,你会明白我的意思

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

因此,这意味着在第二个查询中,我将表中的结果集与另一个表进行比较,而不是结果集? – HasS

+0

更新答案请查看 –

+0

在第二个查询您的使用组,所以它将组使用a.id,然后取平均每个组,使平均值将等于它的值 –

2

有一个逻辑错误。第二个查询不处理两个表。