Хорошо, здесь есть небольшой философский трактат ...
«Различный» означает «отклонить дубликаты».И чтобы обнаружить дублированные строки, вы сначала сравниваете их на равенство.
Если вы просто сравниваете строки на все столбцы , все в порядке: две строки либо равны, либо нет,нет третьей возможности.Таким образом, вы всегда знаете, следует ли отклонить строку как дубликат или нет.
Однако, если вы попытаетесь сравнить строки путем сравнения подмножества их столбцов , вы столкнетесь с проблемой: строкикоторые равны при сравнении по подмножеству их столбцов, могут не совпадать при сравнении по всем столбцам.Так они дубликаты или нет?
- Если вы считаете их дубликатами и отклоняете одну из строк, вы также отклоняете значения, которые могут не существовать в другой строке.Вы фактически теряете данные (не говоря уже о том, что какие данные, которые вы теряете, являются случайными, поэтому даже хранящиеся вами данные по сути бесполезны).
- Если вы не считаете их дубликатами, товы на самом деле не выделяете их в подмножестве столбцов, что противоречит тому, что вы пытались сделать в первую очередь.
Таким образом, можно сделать отдельные строки в подмножестве столбцов:
- , если вы не сохраните другие столбцы,
- или «объединяя» значения в других столбцах, подвергая их агрегирующим функциям, таким как
MAX
, COUNT
, SUM
и т. д.
По этой причине GROUP BY
должно охватывать всех неагрегированных столбцов.DISTINCT
- это просто GROUP BY
для всех столбцов.