В этом случае выше, из-за упомянутой ошибки, я в значительной степени вынужден включить "Площадь" и "Размер" в мою группу, даже если она не содержит данных, которые я хотел бы "Группа "на.Группировка по столбцам «FlockType», «FarmNo» и «SettleDate» возвращает уникальную запись.По этим группировкам никогда не будет возвращено две одинаковые записи.
SQLServer не обязательно знает это, потому что в любое время в будущем МОЖЕТ быть случай, когда в группе участвует более 1 строки.Он не будет смотреть на определение таблицы и идти: «О, flocktype / farmno / deposledate - это уникальный ключ таблицы, поэтому с этой комбинацией никогда не будет больше строки, поэтому я позволю пользователю простогруппировка по этим столбцам и добавление любых других столбцов, которые им нравятся, без группировки / функции агрегирования "
Почему этого не происходит?Возможно, потому что это ненужная сложность;как пользователь, вы можете оценить это, и, следовательно, не имеет значения, делаете ли вы SELECT flock, farm, settledate, x GROUP BY flock, farm, settledate, x
или SELECT flock, farm, settledate, max(x) GROUP BY flock, farm, settledate
- конечный результат будет таким же.Вынуждая вас указывать до такой степени, запрос будет продолжать работать, даже если уникальный ключ удален и добавлено больше строк, но это вторично к понятию, что «уникальные ключи не учитываются в ситуациях группирования, просто чтобы избавить вас от необходимостинабрать несколько символов, потому что они не должны быть такими, и их рассмотрение может быть очень сложным "
Из-за этого столбцы 'Площадь' и 'Размер' влияют на запрос?
Нет, группируете ли вы их или объединяете их, есть только один из них, поэтому они не имеют никакого значения в любом случае.Я не думаю, что вы также найдете заметную разницу в производительности, так как по сути это просто «на какой стороне хеш-таблицы они находятся: в качестве единственного ключа или в виде единого значения?»
Скажем, у меня есть 100 столбцов, которые нужно выбрать, это плохая практика и / или это повлияет на остальную часть моего запроса, если я включу все эти другие столбцы в свою группу?
Выдолжны группироваться по столбцу или включать его в совокупность.Вы можете группировать по большему количеству столбцов, чем используете (но это сбивает с толку, потому что select farm group by farm, flock, settle
генерирует множество повторных записей с одной и той же фермой и ничего не может их отличить), но вы не можете сгруппировать по меньшему количеству столбцов, чем используете