Предложение GROUP BY в MySQL группирует записи с разными значениями

0

GROUP BY группы MySQL GROUP BY записывают записи, даже если они имеют разные значения.

Однако я бы хотел, чтобы это было как с DB2 SQL, так что если записи не содержат точно такой же информации, они не группируются.


В настоящее время в MySQL для:

id Name

Аманда

A Ana

Group by id будет возвращать 1 запись случайным образом (если, конечно, не применяются условия агрегирования)

Однако в DB2 SQL одна и та же Group by id не группирует их: возвращает 2 записи и никогда не делает так, чтобы случайно выбирать одно из значений при группировке без использования функций агрегации.

  • 0
    Да, поскольку вы группируете по идентификатору, он будет возвращать случайное имя и, скорее всего, первое всегда. Может быть, вы хотите, чтобы результат был сгруппирован по идентификатору, имени
  • 0
    Мораль этой истории заключается в том, что не используйте GROUP BY не включая все выбранные неагрегированные поля.
Показать ещё 2 комментария
Теги:
group-by

3 ответа

1
Лучший ответ

Во-первых, id - это плохое имя для столбца, который не является первичным ключом таблицы. Но это не относится к вашему вопросу.

Этот запрос:

select id, name
from t
group by id;

возвращает ошибку почти в любой базе данных, кроме MySQL. Проблема в том, что name не входит в group by и не является аргументом функции агрегации. Ошибка - это стандартное поведение ANSI, которое не соблюдается MySQL.

Типичным способом написания запроса является:

select id, max(name)
from t
group by id;

Это должно работать во всех базах данных (при условии, что name не является каким-то неясным типом, где max() не работает).

Или, если вам нужно каждое имя, тогда:

select id, name
from t
group by id, name;

или проще:

select distinct id, name
from t;

В MySQL вы можете получить стандартное поведение ANSI, установив ONLY_FULL_GROUP_BY для базы данных/сессии. Затем MySQL вернет ошибку, как это делает DB2 в этом случае.

Самые последние версии MySQL имеют ONLY_FULL_GROUP_BY установленные по умолчанию.

  • 0
    Это похоже на то, что я нашел. Возможно, причина в том, что у меня есть только разрешения на чтение в базу данных или я использую клиент HeidiSQL, но мне не удается изменить значение ONLY_FULL_GROUP_BY ...
  • 0
    «MySQL вернет ошибку, как DB2 в этом случае». это на самом деле не правильно (по крайней мере, для моей базы данных DB2). В моем случае он просто не группирует эти записи.
0

Я не думаю, что есть автоматизированный способ сделать это, но используя

GROUP BY id, name

Дала бы вам решение, которое вы ищете

0

Группировка в mysql будет группировать записи в соответствии с установленными полями. Думайте об этом как: Он получает один, а другие не появятся. Например, он использует, чтобы подсчитать, сколько раз этот идентификатор повторяется в таблице:

select count(id), id from table group by id

Однако вы можете достичь своей цели, группировать по нескольким полям, что-то вроде строк:

select * from table group by id, name

Ещё вопросы

Сообщество Overcoder
Наверх
Меню