Поскольку я новичок, очевидно, я не могу публиковать полезные изображения, поэтому я попытаюсь сделать это с текстом ...
Я только что проверил это, и кажется, что значения полей, которые НЕ являютсяв GROUP BY будут использоваться значения ПЕРВОЙ строки, которая соответствует группе по условию.Это также объясняет воспринимаемую «случайность», с которой сталкиваются другие при выборе столбцов, которые не входят в группу по предложению.
Пример:
Создать таблицу с именем «test» из 2 столбцов с именами «col1» и «col2» с данными, которые выглядят следующим образом:
Col1 Col2
1 2
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
Затем выполните следующий запрос:
выберите col1, col2
из теста
заказ по col2 desc
Вы получитеэтот результат:
1 3
2 3
3 3
1 2
1 2
2 2
3 2
2 1
3 1
Теперь рассмотрим следующий запрос:
выберите groupTable.col1, groupTable.col2
из (
выберите col1,col2
из теста
упорядочить по col2 desc
) groupTable
group by groupTable.col1
упорядочить по groupTable.col1 desc
Вы получите такой результат:
3 3
2 3
1 3
Измените подзапрос на asc:
выберите col1, col2
из тестаt
заказ по col2 asc
Результат:
2 1
3 1
1 2
1 2
2 2
3 2
1 3
2 3
3 3
Снова используйте это в качестве основы для своего подзапроса:
выберите groupTable.col1, groupTable.col2
из (
выберите col1, col2
из теста
упорядочите по col2 asc
) groupTable
сгруппировать по groupTable.col1
упорядочить по groupTable.col1 desc
Результат:
3 1
2 1
1 2
Теперь вы сможете увидеть, как порядок подзапроса влияет на то, какие значения выбираются для полей, которые выбраны, но не в предложении group by.Это объяснило бы воспринимаемую «случайность», о которой упоминали другие, потому что если подзапрос (или его отсутствие) не объединяется с предложением ORDER BY, то mysql будет захватывать строки по мере их поступления, но путем определения порядка сортировки в подзапросе, который выспособны контролировать это поведение и получать предсказуемые результаты.