当在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如何知道它将用于对结果集进行分组的列?
我认为它会按顺序执行,但我将组更改为'b.tb2_id,a.tb1_id',但它不做任何更改,结果相同。
答案 0 :(得分:6)
group by a.tb1_id, b.tb2_id
表示a.tb1_id
和b.tb2_id
对的分组,a.tb1_id
和b.tb2_id
都需要相同才能被视为一个群组。< / p>
答案 1 :(得分:0)
只有order by
子句影响行的顺序。
group by
子句影响数据聚合。 mysql的特殊之处在于,与大多数其他数据库不同,它允许按未选择的列对数据进行分组,并进一步允许按列分组非聚合。在这个最后一个选项被执行的情况下(如在你的查询中 - a.nome
没有被分组),mysql返回为每个组遇到的第一个行。如果您尝试执行此查询,我知道的所有其他数据库都会抛出SQL语法异常。