2012-07-04 25 views
2

那麼MySQL如何工作的:在分組中使用多列時mysql如何工作?使用比列更多的時候在GROUP BY像

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',但它沒有做任何改變,相同的結果。

回答

3

group by a.tb1_id, b.tb2_id通過對a.tb1_idb.tb2_id,既a.tb1_idb.tb2_id需要指基團是相同的待處理爲一組。

+0

目前爲止我見過的最佳解釋 – Ash

0

只有order by子句會影響行的順序。

group by子句會影響數據聚合。與其他大多數數據庫不同的是,mysql的特殊之處在於,它允許按未選擇的列對數據進行分組,並且還允許按列進行非分組非聚合。在這個最後一個選項被執行的情況下(如在你的查詢中 - a.nome未被分組),mysql返回每個組遇到的行的第一個行。如果您嘗試執行此查詢,我知道的所有其他數據庫都會拋出SQL語法異常。