所以我的查询看起来像这样:
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
我怎样才能使我的结果中出现负值?这有什么不对?在此先感谢您的任何帮助。
答案 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