Примечание: все нижеприведенное относится только к MySQL
GROUP BY
- это гарантировано для возврата результатов в порядке, DISTINCT
- нет.
GROUP BY
вместе с ORDER BY NULL
имеет ту же эффективность, что и DISTINCT
(и реализована, скажем, способом).Если в агрегируемом (или дифференцированном) поле имеется индекс, в обоих пунктах используется свободное сканирование индекса по этому полю.
В GROUP BY
можно возвращать не сгруппированные и не агрегированные выражения.MySQL
выберет любые случайные значения из соответствующей группы для вычисления выражения.
С помощью GROUP BY
вы можете опустить выражения GROUP BY
в предложении SELECT
.С DISTINCT
вы не можете.Каждая строка, возвращаемая DISTINCT
, гарантированно будет уникальной.