1

mysql データベースに 2 つのテーブルがあります

グループ

id|name
_______
1 |red
2 |blue
3 |green
4 |white

とユーザー

id|name  |group
_______________
1 |joe   |1
2 |max   |1
3 |anna  |2
4 |lisa  |2

つまり... ジョーとマックスは「赤」グループに属し、アンナとリサは「青」グループに属します。

そのグループ内の人数を含むグループの簡単なリストを作成するにはどうすればよいですか?たとえば

red - 2
blue - 2
green - 0
white - 0
4

6 に答える 6

1

これが機能するかどうかを確認してください....

SELECT COUNT(*), groups.name FROM groups, users WHERE users.group=groups.id GROUP BY groups.name

アップデート

SELECT groups.name, COUNT(users.*) FROM groups LEFT JOIN users
ON groups.id=users.group GROUP BY groups.name

これにより、関連する名前がなくても色が保持されます

于 2012-04-11T16:35:32.353 に答える
1

他のほとんどの回答は基本的に正しいですが、重要な詳細を忘れていました:GROUPは SQL の予約語であるため、列名をエスケープする必要があります:

SELECT groups.name, COUNT(*) AS total_members
FROM groups 
LEFT OUTER JOIN users 
ON users.`group` = groups.id
GROUP BY groups.id
于 2012-04-11T16:42:24.157 に答える
0

これはうまくいくはずです

SELECT g.*, COUNT(DISTINCT u.id) FROM `groups` g
INNER JOIN `users` u on g.id = u.group
GROUP BY u.id
于 2012-04-11T16:46:02.223 に答える
0

これを試してください:

select g.name, count(u.id) from groups g
left join users u on g.id = u.group
group by g.id, g.name
于 2012-04-11T16:37:23.997 に答える
0

これを試して

SELECT COUNT(g.id) as count, g.name 
FROM groups as g
LEFT JOIN users as u 
ON u.group = g.id
GROUP BY g.id
于 2012-04-11T16:37:31.847 に答える
0

多分これはうまくいくはずです

SELECT g.name, COUNT( u.id ) AS Totoal
FROM  `groups` g
INNER JOIN  `users` u ON g.id = u.group
GROUP BY g.id
于 2012-04-11T17:00:07.770 に答える