Подсчет строк из второй таблицы

У меня есть две таблицы в базе данных mysql

группы

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

person Goldie    schedule 11.04.2012    source источник


Ответы (6)


Попробуйте это:

select g.name, count(u.id) from groups g
left join users u on g.id = u.group
group by g.id, g.name
person Mosty Mostacho    schedule 11.04.2012

Большинство других ответов в основном правильные, но забыли важную деталь: GROUP - это зарезервированное слово в SQL, поэтому имя вашего столбца должно быть экранировано:

SELECT groups.name, COUNT(*) AS total_members
FROM groups 
LEFT OUTER JOIN users 
ON users.`group` = groups.id
GROUP BY groups.id
person bfavaretto    schedule 11.04.2012

проверьте, работает ли это....

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

это сохранит цвета, даже если они не имеют никакого отношения к имени

person Sandeep Rajoria    schedule 11.04.2012

Попробуй это

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
person safarov    schedule 11.04.2012

Это должно работать

SELECT g.*, COUNT(DISTINCT u.id) FROM `groups` g
INNER JOIN `users` u on g.id = u.group
GROUP BY u.id
person Starx    schedule 11.04.2012

может это должно сработать

SELECT g.name, COUNT( u.id ) AS Totoal
FROM  `groups` g
INNER JOIN  `users` u ON g.id = u.group
GROUP BY g.id
person IT Advanture    schedule 11.04.2012