Mysql:减法不让我低于0

时间:2015-08-11 19:47:39

标签: mysql sql

所以我的查询看起来像这样:

select name_of_restaurant, diners - avg(diners)
from table
group by name_of_restaurant;

name_of_restaurant是VARCHAR(50),diners是INT。

我期待它做的是:

name_of_restaurant    diners - avg(diners)
merchant1                     -140
merchant2                     -200
merchant3                     -2

但我得到了:

name_of_restaurant    diners - avg(diners)
merchant1                     0.0000
merchant2                     0.0000
merchant3                     0.0000

我怎样才能使我的结果中出现负值?这有什么不对?在此先感谢您的任何帮助。

1 个答案:

答案 0 :(得分:1)

您在此处使用的GROUP BY表达式格式错误。 diners既不是分组的一部分也不是聚合函数,因此在SELECT语句中引用它在技术上是无效的,因为单个组中的该列可能有多个不同的值。 MySQL默默地忽略了这一点并使用了该组中的任意值。

(这是MySQL的一个不幸的怪癖,甚至允许这样做。请参阅“Why does MySQL allow "group by" queries WITHOUT aggregate functions?”进行讨论。)

无论如何,根据你在这里描述的内容,我认为你根本不想要GROUP BY;您尝试做的事情是将每行的diners整体平均值进行比较,而不是该行或组的平均值。如果是这样的话,你需要做的就是:

SELECT
     name_of_restaurant,
     diners - (SELECT AVG(diners) FROM table)
FROM table