MySQL GROUP BY и тестирование сгруппированных элементов - PullRequest
0 голосов
/ 15 октября 2010

У меня есть такой запрос:

select a, b, c, group_concat(d separator ', ')
from t
group by a;

Кажется, это работает просто отлично.Насколько я понимаю (простите, я новичок в MySQL!), Он возвращает строки:

  • каждое уникальное a значение
  • для каждого a значения,одно b и c значение
  • также для каждого a значения, все значения d, объединенные в одну строку

Это то, что я хочу, ноЯ также хочу проверить, что для каждого a значения b и c всегда одинаковы для всех строк с этим значением a.

Моя первая мысль - сравнить:

select count(*) from t group by a, b, c;

с:

select count(*) from t group by a;

и убедитесь, что они равны.Но я не убедил себя, что это правильно, и я, конечно, не уверен, что нет лучшего способа.Есть ли для этого идиома SQL / MySQL?

Спасибо!

1 Ответ

1 голос
/ 15 октября 2010

Проблема с использованием функции Скрытые столбцы MySQL изложена в документации :

При использовании этой функции все строки в каждой группе должны иметь одинаковые значения длястолбцы, которые опущены в части GROUP BY.Сервер может свободно возвращать любое значение из группы, поэтому результаты являются неопределенными, если все значения не совпадают.

Применительно к вашему примеру это означает, что значения для b и c являются произвольными - на результаты нельзя полагаться, чтобы последовательно возвращать то же значение, и вероятностьнаблюдение за поведением увеличивается с увеличением числа возможных значений, которые b / c может вернуть.Так что нет большого смысла сравнивать с GROUP BY a и GROUP BY a, b, c ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...