Если у меня есть два столбца, один с очень высокой мощностью, а другой с очень низкой мощностью (уникальное количество значений), имеет ли значение, в каком порядке я группирую?
Вот пример:
select
dimensionName,
dimensionCategory,
sum(someFact)
from SomeFact f
join SomeDim d on f.dimensionKey = d.dimensionKey
group by
d.dimensionName, -- large number of unique values
d.dimensionCategory -- small number of unique values
Есть ли ситуации, когда это важно?
sql
sql-server
group-by
Джефф Фрикаделька Ян
источник
источник
Ответы:
Нет, порядок не имеет значения для предложения GROUP BY.
MySQL и SQLite - единственные известные мне базы данных, которые позволяют вам выбирать столбцы, которые исключены из группы (нестандартные, не переносимые), но порядок там тоже не имеет значения.
источник
SQL декларативен.
В этом случае вы сказали оптимизатору, как вы хотите сгруппировать данные, и он решил, как это сделать.
Он не будет оценивать построчно (процедурно) и сначала будет смотреть на один столбец
Порядок расположения столбцов в основном имеет значение для индексов.
col1, col2
не то же самое, чтоcol2, col1
. Вообще.источник
В Microsoft SQL Server есть устаревшая нестандартная функция под названием ROLLUP. ROLLUP является расширением синтаксиса GROUP BY, и когда он используется, порядок столбцов GROUP BY определяет, какие столбцы должны быть сгруппированы в результате. Однако ROLLUP устарел. Стандартная альтернатива SQL - использовать наборы группировки, которые поддерживаются SQL Server 2008 и более поздними версиями.
источник
Поскольку об этом здесь не упоминалось. Вышеуказанные ответы верны, т. Е. Порядок столбцов после предложения «group by» не повлияет на правильность запроса (то есть сумму суммы).
Однако порядок получаемых строк будет варьироваться в зависимости от порядка столбцов, указанного после предложения «group by». Например, рассмотрим таблицу
A
со следующими строками:SELECT *, SUM(Col3) FROM A GROUP BY Col2, Col1
будет извлекать строкиCol2
в порядке возрастания.Теперь измените порядок столбцов в группе на
Col1, Col2
. Полученные строки отсортированы по возрастаниюCol1
.т.е.
select *, sum(Col3) from A group by Col1, Col2
Примечание. Сумма суммирования (т.е. правильность запроса) остается неизменной.
источник
Если у меня есть два столбца, один с очень высокой мощностью, а другой с очень низкой мощностью (уникальное количество значений), имеет ли значение, в каком порядке я группирую?
Запрос-1
SELECT spec_id, catid, spec_display_value, COUNT(*) AS cnt FROM tbl_product_spec GROUP BY spec_id, catid, spec_display_value ;
Запрос-2
SELECT spec_id, catid, spec_display_value, COUNT(*) AS cnt FROM tbl_product_spec FORCE INDEX(idx_comp_spec_cnt) GROUP BY catid, spec_id,spec_display_value;
Оба равны, порядок не работает в группе по пункту.
источник