У меня есть следующие таблицы:
Persons
|id |firstname|lastname|
|-----|---------|--------|
|1 |John |Doe |
|2 |Jim |Smith |
|3 |Jane |Boggard |
|4 |Joe |Dash |
Vehicles
|p_id |type |
|-----|-------|
|1 |car |
|1 |bike |
|1 |car |
|2 |car |
|3 |car |
|3 |bike |
|4 |plane |
Я хочу найти способ получить количество автомобилей для каждого человека (то есть: количество строк, соответствующих таблице "Транспортные средства"). Я попробовал подзапрос в объединенной таблице с использованием COUNT, но я получил неправильные результаты.
Результат, который я ожидаю, будет выглядеть примерно так:
|firstname|lastname|nb_cars|
|---------|--------|-------|
|John |Doe |2 |
|Jim |Smith |1 |
|Jane |Boggard |1 |
|Joe |Dash |0 |
Как я мог это достичь?
Попробуй это
Select p.firstname, p.lastname, count(v.p_id) as no_of_car
From Persons p left join Vehicles v on (p.id = v.p_id and v.type = 'car')
group by p.firstname, p.lastname
Вы должны использовать join
& group by
clauses, например:
SELECT p.firstname, p.lastname, count(v.p_id) AS nb_cars
FROM Persons p
JOIN Vehicles v ON p.id = v.p_id
GROUP BY p.id
выполнять левую функцию объединения и aggregate
sum
select p.firstname, p.lastname,
sum(case when v.type='car' then 1 else 0 end) as nb_cars
from Persons p
left outer join Vehicles v on p.id = v.p_id
group by p.id, p.firstname, p.lastname
firstname lastname nb_cars
John Doe 2
Jim Smith 1
Jane Boggard 1
joe Dash 0
Попробуй это:
select *,
(select count(*) from Vehicles
where p_id = p.id and type = 'car')
from Persons p'