2015-08-11 2 views
0

Поэтому у меня есть запрос, который выглядит следующим образом:Mysql: вычитают не позволяет мне опускаться ниже 0

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

name_of_restaurant является VARCHAR (50) и обедающих является 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 

Как я могу сделать это так, что я получаю отрицательные значения в мой результат? Что здесь не так? Спасибо заранее за любую помощь.

+2

Какова структура таблицы 'table'? – duskwuff

+0

Это просто таблица с двумя колонками. Один столбец называется name_of_restaurant VARCHAR (50), а другой - столбцом INT, называемым diners. Нет первичных ключей, индексов, ограничений или любых сложных структур данных. –

+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 
+0

После того, как я занялся этим и рассмотрел некоторые из ваших предложений, я получил его на работу. Спасибо, что поставили меня на правильный путь! И замечательная статья. –