Вы используете MAX
, который является агрегатной функции. Агрегатные функции влияют на обработку нескольких строк в таблице в виде группы. Если вы не сделаете ничего особенного, все строки во всей таблице будут использоваться как одна большая группа, и когда будет создана функция агрегации, такая как MAX
, все эти строки будут сведены в одну совокупную строку. Этот эффект конденсации имел бы место и для других совокупных функций, таких как MIN
, SUM
, GROUP_CONCAT
и друзей (см .: http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html). Вы также можете применять определенные группировки, используя конструкцию GROUP BY
, но если вы не выполняете функцию агрегата, просто свяжите все строки в одну строку (но это объединение происходит после применения условия WHERE
, поэтому только отфильтрованные строки агрегированы)
Теперь из-за этого уплотняющего или «уменьшающего» эффекта агрегатных функций, чтобы каким-то образом сделать одно значение из многих значений. Для MAX
этот путь должен отображать только максимальное значение, найденное для всех экземпляров выражения, которое вы передали в качестве аргумента, в MAX
. Но ваши другие столбцы не имеют такой совокупной функции. Для большинства продуктов базы данных появление как неагрегированных, так и агрегированных столбцов в списке SELECT
будет ошибкой. Но MySQL ведет себя неправильно/по-разному и возвращает только одно из доступных значений для каждого неагрегированного выражения, указанного в бит SELECT
. Какое значение зависит от mysql - вы не можете полагаться на какой-либо конкретный алгоритм.
Во многих случаях люди хотят что-то делать с «любой строкой, которая имеет максимальное значение», другими словами, найдите строку, которая имеет значение как максимальное значение, но использует другие столбцы из этой строки без учета. Решение, предоставленное middaparka, делает это, и есть другие пути для достижения этого (google для максимального размера группы MySQL). Для получения более общей информации об агрегатных функциях и связанной с ним статье GROUP BY
вы можете взглянуть на бескомпромиссную самозарядную статью здесь: http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html
Вау, какой глубокий ответ. +1 –
спасибо Пекке, очень благодарен :) –
удивительный ответ! именно эту информацию мне нужно было понять, как все работает. спасибо – ufk