

このSQLを実行した際の`count(*)`がわかりません。

[code]

    select name from users
    group by belong
    having count(*) >= 2
    
[/code]

テーブルとデータは下記です。

[code]

    create table users (
      id int,
      name varchar(60),
      belong int
    );
    
    insert into users values (1, "A", 102), (2, "B", 103), (3, "C", 102), (4, "D", 105), (5, "E", 103), (6, "F", 102), (7, "G", 104);
    
[/code]

* * *

SQLはgroup byの後にhaving句が実行されるのが調べてわかりました。  
ということは`select name from users group by
belong`の結果をhaving句でさらに絞り込んでるんだとと思いたしかめてみました。

`select name from users group by belong`は下記になりました。  
<http://sqlfiddle.com/#!9/c07780/5>

name  
---  
A  
B  
G  
D  
  
having句をつけるとこうなりました。  
<http://sqlfiddle.com/#!9/c07780/6>

name  
---  
A  
B  
  
`select name from users group by belong`の結果からどうやって`count(*) >=
2`の条件を満たしたレコードが選ばれたんでしょうか？`select name from users group by
belong`で取得したテーブルの`count(*)`は4にしかならないのでAとBだけが選ばれるに至った手順がわかりません。

[COUNT(*)
が何を意味しているのかわからない](https://ja.stackoverflow.com/questions/42915/count-%E3%81%8C%E4%BD%95%E3%82%92%E6%84%8F%E5%91%B3%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8B%E3%82%8F%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84)  
上記URLも読みましたが、理解できず質問しました。

どなたかご教授お願いします。


CC BY-SA 4.0
2021-12-23T23:55:56.293
85309
2021-12-24T00:16:23.557
2021-12-24T00:14:34.203
3060
45076
question
sql
group byとhavingを使った時のcount(*)が何をしているのかわからない


下記のクエリを実行してみたら分かるかと思いますが、

[code]

    select name,belong,count(*) from users　group by belong
    
[/code]

belongでグループ化した結果でname列のみを表示しているので分かりにくいですが、belongが102と103が2レコード以上の条件を満たしています。


CC BY-SA 4.0
2021-12-24T00:16:23.557
85310
2021-12-24T00:16:23.557
3524
85309
answer