I have persons i one table [person] and cars [car] registered to each person i another, connected by id.
I want to get a list of how many persons having how many cars.
Something like this:
PERSON
| id | name |
|---|---|
| 1 | LISA |
| 2 | ADAM |
| 3 | RAY |
CARS
| id | id_person | brand |
|---|---|---|
| 1 | 3 | FORD |
| 2 | 1 | BMW |
| 3 | 2 | VOLVO |
| 4 | 1 | VOLVO |
| 5 | 1 | VW |
RESULT
| no cars | no persons |
|---|---|
| 1 | 2 |
| 2 | 0 |
| 3 | 1 |
Just dont get how to do it?
CodePudding user response:
You need to do it in two stages. The first is to get the number of cars per person -
SELECT p.id, COUNT(*) num_cars
FROM person p
JOIN cars c ON p.id = c.id_person
GROUP BY p.id
This can then be nested to count people per count -
SELECT num_cars, COUNT(*) num_people
FROM (
SELECT p.id, COUNT(*) num_cars
FROM person p
JOIN cars c ON p.id = c.id_person
GROUP BY p.id
) t
GROUP BY num_cars
ORDER BY num_cars ASC
