Поскольку "все знают", вы не можете возвращать не сгруппированные неагрегированные столбцы в GROUP BY
, другими словами, "дайте мне идентификатор, имя и адрес сотрудника с самой высокой зарплатой в каждом отделе«.Конечно, это не совсем так: http://dev.mysql.com/doc/refman/5.1/en/group-by-hidden-columns.html Но это содержит довольно зловещее предупреждение:
Сервер может свободно выбирать любое значение из каждой группы, поэтому, если они не совпадаютвыбранные значения являются неопределенными.
В MySQL есть еще одна статья по этой проблеме: http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html Но методика, рекомендованная там, на самом деле не использует преимущества всех скрытых столбцов.В этой статье есть комментарий от Кейси Спикмана, который рекомендует использовать упорядоченный подзапрос, например:
select deptno, emp_id, address, name from
(select * from emp order by salary desc)
group by deptno
Мои вопросы: а) Могу ли я безопасно положиться на MySQL, чтобы выбрать «первую» строку из каждогоgroup, так как подзапрос упорядочен, и b) в целом, и при условии соответствующих индексов, вероятно ли, что это будет работать лучше, чем, скажем, метод LEFT JOIN, упомянутый в той же статье?