2016-12-15 5 views
0

Я пытаюсь подсчитать количество результатов в столбце после присоединения к таблице, и мне трудно работать с моим запросом.SQL - Объединение нескольких таблиц и count()

В конечном итоге, Мне нужно получить таблицу с идентификатором продукта, названием продукта и количеством медийных средств для каждого продукта.

Это то, что я до сих пор:

SQL

select 
    p.id, 
    p.name, 
    count(distinct mp.media_id) 
from products as p 
left join medias_products as mp 
    on mp.product_id = p.id 
group by mp.media_id 
order by p.id 

Эти таблицы:

Medias

Id  | client id 
------ | --------- 
1  | 1 
2  | 2 

Продукты

id  | name  | client_id 
------ | -------- | --------- 
1  | product1 | 1 
2  | product2 | 2 

medias_products

product_id | media_id 
---------- | -------- 
1   | 2 
2   | 1 

Client

id  | name 
------ | ----- 
1  | Peter 
2  | John 

Кроме того, я хотел бы найти другой запрос, который дал бы мне результаты фильтруются с помощью конкретного идентификатора клиента ,

Может кто-то пролить некоторый свет и поделиться знаниями.

Заранее спасибо.

+0

Существует один основной вопрос, который предотвращает ваш запрос от быть принят SQL компилятор: если у вас есть запрос с группой по-п, как «группа по attrib1, attrib2», то выберите-части не должен содержать никаких других атрибутов, кроме атрибута1 и attrib2 (кроме агрегатных функций, таких как count, sum, ...). –

ответ

0

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

select 
    p.id, 
    min(p.name) as name, 
    count(distinct mp.media_id) as medias 
from products as p 
left join medias_products as mp 
    on mp.product_id = p.id 
group by p.id 
order by p.id 

Для вашего второго запроса:

select 
    p.id, 
    min(p.name) as name, 
    count(distinct mp.media_id) as medias 
from products as p 
inner join medias_products as mp 
    on mp.product_id = p.id 
inner join medias as m 
    on m.id = mp.media_id 
inner join clients as c 
    on c.id = m.client_id 
where c.id = <your client's id> 
group by p.id 
order by p.id 
+0

Объясните, что было не так, и как вы его исправили, не просто сваливайте кучу кода. – Barmar

0

Не должны ли вы GROUP BY p.id вместо mp.media_id? Это

select 
    p.id, 
    p.name, 
    count(distinct mp.media_id) 
from 
    products as p 
    left join medias_products as mp 
     on p.id = mp.product_id 
group by p.id 
order by p.id 
Смежные вопросы