2

那么当在 group by 上使用多个列时,mysql 是如何工作的:

select
    a.nome,
    b.tb2_id,
    count(c.tb2_id) as saida
from tb1 a
left join tb2 b on a.tb1_id = b.tb1_id
left join tb3 c on b.tb2_id = c.tb2_id
group by a.tb1_id, b.tb2_id
order by a.tb1_id desc

mysql如何知道它将使用哪一列对结果集进行分组?

我认为它会按顺序执行,但我将 group by 更改为 'b.tb2_id,a.tb1_id' 但它没有做任何更改,结果相同。

4

2 回答 2

7

group by a.tb1_id, b.tb2_id表示由 和 组成的组a.tb1_idb.tb2_id两者a.tb1_idb.tb2_id需要相同才能被视为一个组。

于 2012-07-04T02:22:52.770 回答
0

只有order by子句影响行的顺序。

group by子句影响数据聚合。mysql 的特殊之处在于,与大多数其他数据库不同,它允许按未选择的列对数据进行分组,并进一步允许对未按列分组的数据进行非聚合。在这种最后一个选项被执行的情况下(如在您的查询中 -a.nome没有被分组),mysql返回每个组遇到的第一行。如果您尝试执行此查询,我知道的所有其他数据库都会引发 SQL 语法异常。

于 2012-07-04T04:52:34.800 回答