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 がどのように認識するのでしょうか?

順番に行うと思っていましたが、グループを「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_idである必要があります。b.tb2_id

于 2012-07-04T02:22:52.770 に答える
0

order by句のみが行の順序に影響します。

このgroup by句はデータ集計に影響します。mysql は、他のほとんどのデータベースとは異なり、選択されていない列によってデータをグループ化でき、さらにグループ化されていない列を非集計にすることができるという点で特別です。この最後のオプションが実行された場合 (クエリのように -a.nomeはグループ化されていません)、mysql は各グループで検出された最初の行を返します。このクエリを実行しようとすると、私が知っている他のすべてのデータベースは SQL 構文の例外をスローします。

于 2012-07-04T04:52:34.800 に答える