列的顺序是否按照分组来划分?

如果我有两列,一个基数很高,一个基数很低(唯一的值),那么按照哪个顺序分组呢?

这是一个例子:

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 

有什么情况下重要吗?

不,订单对GROUP BY子句无关紧要。

MySQL和SQLite是我所知道的唯一的数据库,允许你select从组中省略的列(非标准的,不可移植的),但是命令也不重要。

SQL是声明式的。

在这种情况下,您已经告诉优化器您想如何分组数据,以及如何实现。

它不会逐行评估(程序)并首先查看一列

主要的地方列顺序很重要的是索引。 col1, col2col2, col1 。 完全一样。

Microsoft SQL Server有一个传统的非标准function叫做ROLLUP。 ROLLUP是GROUP BY语法的扩展,当使用GROUP BY列的顺序决定哪些列应该在结果中进行分组。 ROLLUP已弃用。 标准的SQL替代方法是使用SQL Server 2008及更高版本支持的分组集。

因为这里没有提到。 上面的答案是正确的,即“group by”子句之后的列顺序不会影响查询的正确性 (即总额)。

但是,检索的行的顺序将根据“group by”子句之后指定的列的顺序而变化。 例如,考虑表A和以下行:

 Col1 Col2 Col3 1 xyz 100 2 abc 200 3 xyz 300 3 xyz 400 

SELECT *, SUM(Col3) FROM A GROUP BY Col2, Col1将按升序检索Col2sorting的行。

 Col1 Col2 Col3 sum(Col3) 2 abc 200 200 1 xyz 100 100 3 xyz 300 700 

现在将组中列的顺序改为Col1, Col2 。 检索到的行按Col1sorting。

select *, sum(Col3) from A group by Col1, Col2

 Col1 Col2 Col3 sum(Col3) 1 xyz 100 100 2 abc 200 200 3 xyz 300 700 

注:总和数量(即查询的正确性)保持完全相同。

如果我有两列,一个基数很高,一个基数很低(唯一的值),那么按照哪个顺序分组呢?

查询-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; 

两者都是平等的,秩序并不在条款中工作。