Получить количество строк, соответствующих левой объединенной таблице?

0

У меня есть следующие таблицы:

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      |

Как я мог это достичь?

Теги:

4 ответа

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
0

Вы должны использовать 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
0

выполнять левую функцию объединения и 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

http://sqlfiddle.com/#!9/016d72/1

0

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

select *,
       (select count(*) from Vehicles
        where p_id = p.id and type = 'car')
from Persons p'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню